public class Test6 { /** * @param 大数相加 */ public String add(String str1,String str2){ int jinwei = 0; StringBuffer sb1 = new StringBuffer(str1); sb1.reverse(); StringBuffer sb2 = new StringBuffer(str2); sb2.reverse(); int len1=sb1.length(),len2=sb2.length(),minLen = (len1>len2)?len2:len1; StringBuffer sb = new StringBuffer(""); for(int i=0;i<minLen;i++){ int single =Integer.parseInt(sb1.charAt(i)+"")+Integer.parseInt(sb2.charAt(i)+"")+jinwei; sb.append(single%10); jinwei = single /10; } if(len1==len2){ sb.append(jinwei); return sb.reverse().toString(); }else if(len1>len2){ for(int i=len2;i<len1;i++){ int single =Integer.parseInt(sb1.charAt(i)+"")+jinwei; sb.append(single%10); jinwei = single /10; } sb.append(jinwei); return sb.reverse().toString(); }else{ for(int i=len1;i<len2;i++){ int single =Integer.parseInt(sb2.charAt(i)+"")+jinwei; sb.append(single%10); jinwei = single /10; } sb.append(jinwei); return sb.reverse().toString(); } } public static void main(String[] args) { Test6 test6 = new Test6(); System.out.println(test6.add("123543534523452435243523452345243524352342345234523452", "9234523453245234523423452455234523452435341")); } }
import java.util.regex.*; public class Test5 { /** * @param 将一个字符串中的单词提取出来 */ public String getWords(String str,String reg){ Pattern pat = Pattern.compile(reg); Matcher mat = pat.matcher(str); StringBuffer sb = new StringBuffer("") ; while(mat.find()){ sb.append(mat.group(1)+","); } return sb.toString(); } public static void main(String[] args) { // \b:单词的边界 Test5 test5 = new Test5(); System.out.println(test5.getWords("hello my name is 123swh!","\\b(\\w+)\\b")); } }
import java.util.Scanner; public class Test4 { /** * @param 求一个字符串中的最大回文字符串 */ public boolean huiwen(String str){ StringBuffer sb1 = new StringBuffer(str); sb1.reverse(); return str.equals(sb1.toString()); } //进行信息的定位 public int[] selectHuiwen(String str){ int[] res = new int[3]; int max=0,start=0,end=0; int len = str.length(); for(int i=0;i<len;i++) for(int j= i+1;j<len;j++){ if(huiwen(str.substring(i,j+1))){ if((j-i+1)>max){ start = i; end = j+1; max = j-i+1; } } } res[0] = max;res[1] = start;res[2] = end; return res; } public static void main(String[] args) { Scanner scan = new Scanner(System.in); String str = scan.nextLine(); Test4 test4 = new Test4(); System.out.println(str.substring(test4.selectHuiwen(str)[1], test4.selectHuiwen(str)[2])); } }
4、分解因式。我直接使用递归的方法
import java.util.Scanner; public class Test3 { /** * @分解因式 */ public static String fenjie(int num){ if(num == 1) return "1"; for(int j=2;j<=num;j++) { if(num % j ==0) return j+"*"+fenjie(num/j); } return null; } public static void main(String[] args) { Test3 test3 = new Test3(); Scanner scan = new Scanner(System.in); int inp = scan.nextInt(); //System.out.println(scan.nextLine()); System.out.println(test3.fenjie(inp)); } }
5、正则表达式的使用。将输入字符 122453234 中的3x5替换为-3x5- ,如 1234534,output: 12-345-34
import java.sql.Timestamp; import java.util.regex.Matcher; import java.util.regex.Pattern; public class regexTest { public static void main(String args[]) { String string="12345673254"; System.out.println(regexTest.regexReplace("3(\\S{1})5", "-$0-", string)); //其实这样就一步就可以了,但是使用了Pattern和Matcher就是为了熟悉正则表达式 // System.out.println(string.replaceAll("3(\\S{1})5", "-$1-")); } public static String regexReplace(String regex,String repStr,String content) { Pattern p = Pattern.compile(regex); Matcher m = p.matcher(content); StringBuffer sb = new StringBuffer(); boolean result = m.find(); while(result){ m.appendReplacement(sb, repStr); result = m.find(); } m.appendTail(sb); return sb.toString(); } }
6、进制转换。这个就太简单了,以 2 和 10进制的互化为例子
public class Test7 { /** * @param java进制转换 */ public static void main(String[] args) { //like 2 -> 10 String source1 = "1101000101000110111"; int sum1 = 0,i= source1.length()-1; for(;i>=0;i--){ sum1 += Integer.parseInt(source1.charAt(i)+"")*(java.lang.Math.pow(2, source1.length()-i-1)); //注意方向 } System.out.println("2进制 :"+Integer.toBinaryString(sum1)+" 其10进制为:"+sum1); //like 10 -> 2 相除求余法 int source2 = sum1; StringBuffer sb = new StringBuffer(""); while(source2!=1){ sb.append(source2 % 2); source2 = source2/2; } sb.append(1); System.out.println("10进制:"+sum1+" 其2进制为:"+sb.reverse().toString()); } }
7、输入字符串长度,字符串,计数m。
import java.util.ArrayList; public class Test9 { /** * @param * 输入字符串长度,字符串,计数m。从前往后计数,当数到m个元素时,m个元素出列,同时将该元素赋值给m,然后从下一个数计数循环,直到所有数字都出列,给定的数全部为大于0的数字。输出出队队列 */ public static void main(String[] args) { int len=4; String str="3,1,2,4"; int m=7; Test9 test9 = new Test9(); System.out.println(test9.getOutString(len, str, m)); } public String getOutString(int len, String str, int m) { int i=0,cur=0; String []arr = str.split(","); ArrayList<String> vt = new ArrayList<String>(); for(;i<len;i++) vt.add(arr[i]); while(vt.size()!=0){ int size = vt.size(); int temp = ( m+cur-1 )% size; cur = temp; System.out.print("--"+vt.toString()+"--"); System.out.print(vt.get(temp)+","); m = Integer.parseInt(vt.get(temp)); vt.remove(temp); } return ""; } }
返回: 0
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test10 { /** * @param 手机号码标准格式为 * :国家码+手机号码,例如:8613912345678 */ public static void main(String[] args) { String inMsisdn = "8613912315678"; System.out.println(new Test10().verifyMsisdn(inMsisdn)); } int verifyMsisdn(String str) { Matcher mat = Pattern.compile("86\\d{11}$").matcher(str); if (mat.find()) return 0; else { if (str.length() != 13) { return 1; } else { Matcher mat1 = Pattern.compile("86\\S{11}$").matcher(str); if (mat1.find()) return 2; else{ //余下的情况就是:开头不是86 return 3; } } } } }
另附网上的方法,利用了Character的静态函数isDigit和digit(int,int)
int verifyMsisdn(String str) { char[] inchars = str.toCharArray(); if(inchars.length!=13) return 1; for(int i=0;i<13;i++) { if(!Character.isDigit(inchars[i])){ return 2; } } if((Character.digit(inchars[0], 10)!=8 )||(Character.digit(inchars[1], 10)!=6) ) return 3; else return 0; }
输入一个表达式,没有括号,数字小于0-9之间,输出计算结果,所有的中间结果化为整形。
例如: 输入:3+8×2/9-2
输出:2
import java.util.ArrayList; import java.util.List; import java.util.Vector; public class Test11 { /** * @param 输入一个表达式,没有括号,数字小于0-9之间,输出计算结果,所有的中间结果化为整形。 例如: 输入:3+8×2/9-2 输出:2 public int getMyRet(String str) */ public static void main(String[] args) { Test11 test11 = new Test11(); System.out.println(test11.getMyRet("3+2-8*2/2-2")+""); } public int getMyRet(String str) { List<String> vt = new ArrayList<String>(); for(int i=0;i<str.length();i++) vt.add(str.charAt(i)+""); for(int m=0;m<vt.size();m++){ if(vt.get(m).equals("*")||vt.get(m).equals("/")){ if(vt.get(m).equals("*")) vt.add(m-1,(Integer.parseInt(vt.get(m-1))*Integer.parseInt(vt.get(m+1)))+""); else vt.add(m-1,(Integer.parseInt(vt.get(m-1))/Integer.parseInt(vt.get(m+1)))+""); vt.remove(m); vt.remove(m); vt.remove(m); m --; } } //经过这个处理以后,就不包含乘除了 for(int m=1;m<vt.size()&&m!=0;m++){ if(vt.get(m).equals("+")||vt.get(m).equals("-")){ if(vt.get(m).equals("+")) vt.add(m-1,(Integer.parseInt(vt.get(m-1))+Integer.parseInt(vt.get(m+1)))+""); else vt.add(m-1,(Integer.parseInt(vt.get(m-1))-Integer.parseInt(vt.get(m+1)))+""); vt.remove(m); vt.remove(m); vt.remove(m); m --; } } return Integer.parseInt(vt.get(0)); } }
9、评委打分问题。
选秀节目打分,分为专家评委和大众评委,score[] 数组里面存储每个评委打的分数,judge_type[] 里存储与 score[] 数组对应的评委类别,judge_type[i] == 1,表示专家
评委,judge_type[i] == 2,表示大众评委,n表示评委总数。打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分 = 专家评委平均分 *
0.6 + 大众评委 * 0.4,总分取整。如果没有大众评委,则 总分 = 专家评委平均分,总分取整。函数最终返回选手得分。
public class Test13 { /** * @param 评委打分 */ public static void main(String[] args) { int score[] = { 34,53,65,75,64 }; int judge_type[] = { 1,1,1,2,2 }; Test13 test13 = new Test13(); System.out.println(test13.cal_score(score, judge_type, 5)); // System.out.println((int)(0.4*3)); } public int cal_score(int score[], int judge_type[], int n){ int a =0,b=0,as=0,bs=0; //a:专家、b:大众 for(int i=0;i<judge_type.length;i++){ if(judge_type[i]==1) { a++; as+=score[i]; } else if(judge_type[i]==2) { b++; bs+=score[i]; } return ( b==0 )?(as):((int)(0.4*(bs/b)+(int)0.6*(as/a))); } return 0; } }
public class Test17 { /** * @param 将一个字符串的元音字母复制到另一个字符串,并进行排序操作 元音字母是a,e,i,o,u,A,E,I,O,U */ static String dest=""; public static void main(String[] args) { Test17 test17 = new Test17(); String soure = "Abort!May Be Some Errors In Out System. "; test17.sortVowel(soure); System.out.println(dest); } public void sortVowel(String source){ for(int i=0;i<source.length();i++){ char ch = source.charAt(i); if(ch=='a'||ch=='e'||ch=='i'||ch=='o'||ch=='A'||ch=='E'||ch=='I'||ch=='O'){ dest +=ch; } } //对dest进行排序 StringBuffer big = new StringBuffer(""); StringBuffer small = new StringBuffer(""); for(int j=0;j<dest.length();j++){ char ch2 = dest.charAt(j); if(ch2=='A'||ch2=='E'||ch2=='I'||ch2=='O'){ big.append(ch2); }else small.append(ch2); } //对big和small进行冒泡排序 for(int m=0;m<big.length();m++) for(int n=m+1;n<big.length();n++){ if(big.charAt(m)>big.charAt(n)){ char temp = big.charAt(m); big.setCharAt(m,big.charAt(n)); big.setCharAt(n,temp); } } for(int m=0;m<small.length();m++) for(int n=m+1;n<small.length();n++){ if(small.charAt(m)>small.charAt(n)){ char temp = small.charAt(m); small.setCharAt(m,small.charAt(n)); small.setCharAt(n,temp); } } dest = small.toString()+big.toString(); } }