java第三次小测验的题解~
1:分离整数的各个数位
描述
给定一个整数,要求从个位开始分离出它的每一位数字。
输入输入一个整数,整数在1到100000000之间。输出从个位开始按照从低位到高位的顺序依次输出每一位数字。数字之间以一个空格分开。样例输入
123
样例输出
3 2 1
import java.util.Scanner; public class Main{ public static void main(String []args) { Scanner cin=new Scanner(System.in); String a=cin.next(); for(int i=a.length()-1;i>=0;i--) System.out.print(a.charAt(i)+" "); cin.close(); } }
2:删除单词后缀
描述
给定一个单词,如果该单词以er、ly或者ing后缀结尾, 则删除该后缀(题目保证删除后缀后的单词长度不为0), 否则不进行任何操作。
输入输入一行,包含一个单词(单词中间没有空格,每个单词最大长度为32)。输出输出按照题目要求处理后的单词。
样例输入
referer
样例输出
refer
注意:string::endsWith的用法
import java.util.Scanner; public class Main { public static void main(String[]args) { Scanner cin=new Scanner(System.in); String string=cin.nextLine(); if(string.endsWith("er")) System.out.println(string.substring(0,string.length()-2)); else if(string.endsWith("er")) System.out.println(string.substring(0,string.length()-2)); else if(string.endsWith("ing")) System.out.println(string.substring(0,string.length()-3)); else System.out.println(string); } }
3:单词替换
描述
输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。
输入输入包括3行,
第1行是包含多个单词的字符串 s;
第2行是待替换的单词a(长度 <= 100);
第3行是a将被替换的单词b(长度 <= 100).
s, a, b 最前面和最后面都没有空格.输出输出只有 1 行,将s中所有单词a替换成b之后的字符串。样例输入
You want someone to help you You I
样例输出
I want someone to help you
分析:
(replaceAll的缺陷是,下一个替换在这个替换之后开始,所以没法通过加首尾空格来实现替换)如果直接用这种方法替换,会导致连续出现的字符串无法被替换。
解决方案:
1.可以用正则变成两个空格进行全部匹配替换。
2.无限使用replaceFirst()
3.用String []=str.spilt(" ");进行切分后,遍历匹配输出。
4.因为replaceAll()只能替换相隔的,所以可以使用两次,第一次替换掉一半,变得不连续,第二次把剩下那一半收拾掉。(方法来源于宋大佬)
第一种方法的代码:
import java.util.*; public class Main { public static void main(String[] args){ Scanner cin=new Scanner(System.in); String str=cin.nextLine(),before=cin.nextLine(),after=cin.nextLine(); String regex="\\s+"; String ss=str.replaceAll(regex, " ");//两个空格 before=" "+before+" "; after=" "+after+" "; ss=" "+ss+" ";//加上首尾空格 System.out.println(ss.replaceAll(before,after).trim().replaceAll(regex, " "));//替换回去 } }
第二种方法的代码:
import java.util.*; public class Main { public static void main(String[] args){ Scanner cin=new Scanner(System.in); String str=cin.nextLine(),before=cin.nextLine(),after=cin.nextLine(); before=" "+before+" "; after=" "+after+" "; str=" "+str+" ";//加上首尾空格 while(true) { if(str.indexOf(before)==-1) break; str=str.replaceFirst(before, after); } System.out.println(str.trim()); } }
第三种方法的代码:
import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc=new Scanner(System.in); String s=sc.nextLine(); String s1=sc.next(); String s2=sc.next(); String[] a=s.split(" "); for(int i=0;i<a.length;i++){ if(a[i].equals(s1)) System.out.print(s2+" "); else System.out.print(a[i]+" "); } sc.close(); } }
第四种方法:
import java.util.*; public class Main { public static void main(String[] args){ Scanner cin=new Scanner(System.in); String str=cin.nextLine(),before=cin.nextLine(),after=cin.nextLine(); before=" "+before+" "; after=" "+after+" "; str=" "+str+" ";//加上首尾空格 str=str.replaceAll(before,after); System.out.println(str.replaceAll(before,after).trim()); } }
4:回文子串
描述
给定一个字符串,输出所有长度至少为2的回文子串。
回文子串即从左往右输出和从右往左输出结果是一样的字符串,比如:abba,cccdeedccc都是回文字符串。
输入一个字符串,由字母或数字组成。长度500以内。输出输出所有的回文子串,每个子串一行。
子串长度小的优先输出,若长度相等,则出现位置靠左的优先输出。样例输入
123321125775165561
样例输出
33 11 77 55 2332 2112 5775 6556 123321 165561
思路:枚举长度,然后遍历找符合条件的子串,输出,三重循环
import java.util.Scanner; public class Main { public static void main(String[]args) { Scanner cin=new Scanner(System.in); String s=cin.nextLine(); char str[]=s.toCharArray(); int n=s.length(); int i=0; for(int len=2;len<=n;len++) { int maxBegin=n-len; for(int begin=0;begin<=maxBegin;begin++) { int j=begin+len-1; for(i=begin;i<j;i++,j--) { if(str[i]!=str[j]) break; } if(i>=j) { j=begin+len-1; for(i=begin;i<=j;i++) System.out.print(str[i]); System.out.println(); } } } } }
5:字符串数组排序问题
描述
给定一组字符串,按指定的排序方式输出这些字符串。排序可是自然顺序(inc)、自然逆序(dec)、忽略大小写顺序(ncinc)、忽略大小写逆序(ncdec)等。
输入输入有多行,第一行为一个表明排序方式的字符串见题面,第二行为字符串的数目。
其余各行每行一个字符串,字符串中间可能空格,前后也可能有空格,但前后的空格要忽略。输出输出也有多行,按指定的顺序输出输入的字符串。样例输入
ncdec 3 Hello World! You're right! haha! you're wrong!
样例输出
You're right! Hello World! haha! you're wrong!
思路:注意排序器的使用
import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Scanner; public class Main { public static void main(String args[]){ Scanner cin=new Scanner(System.in); String mode=cin.nextLine(); List<String> list = new ArrayList(); int n=cin.nextInt(),flag=0; cin.nextLine(); if(mode.equals("inc")) flag=1;//自然 else if(mode.equals("dec")) flag=2;//自然逆序 else if(mode.equals("ncinc")) flag=3;//忽略大小写 else if(mode.equals("ncdec")) flag=4;//忽略大小写逆序 for(int i=0;i<n;i++) { list.add(cin.nextLine()); } if(flag==1) { Collections.sort(list); }else if(flag==2) { Collections.sort(list,new Sort2()); }else if(flag==3) { Collections.sort(list,new Sort3()); }else if(flag==4) { Collections.sort(list,new Sort4()); } for(int i=0;i<n;i++) { System.out.println(list.get(i)); } } static class Sort2 implements Comparator<String> { public int compare(String o1, String o2) { return -o1.compareTo(o2); } } static class Sort3 implements Comparator<String> { public int compare(String o1, String o2) { return o1.compareToIgnoreCase(o2); } } static class Sort4 implements Comparator<String> { public int compare(String o1, String o2) { return -o1.compareToIgnoreCase(o2); } } }
所有的JAVA考试结束啦~
JAVA课在此告一段落