Java测试3

一直忘了整理第三次测试,令人崩溃的一次测试。

现在补上。

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()只能替换相隔的,所以可以使用两次,第一次替换掉一半,变得不连续,第二次把剩下那一半收拾掉。(方法来源于宋大佬)

第一种方法的代码:

  1. import java.util.*;
  2. public class Main {
  3.   public static void main(String[] args){
  4.     Scanner cin=new Scanner(System.in);
  5.     String str=cin.nextLine(),before=cin.nextLine(),after=cin.nextLine();
  6.     String regex=“\\s+”;
  7.     String ss=str.replaceAll(regex, ”  “);//两个空格
  8.     before=” “+before+” “;
  9.     after=” “+after+” “;
  10.     ss=” “+ss+” “;//加上首尾空格
  11.     System.out.println(ss.replaceAll(before,after).trim().replaceAll(regex, ” “));//替换回去
  12.   }
  13. }

第二种方法的代码:

  1. import java.util.*;
  2. public class Main {
  3.   public static void main(String[] args){
  4.     Scanner cin=new Scanner(System.in);
  5.     String str=cin.nextLine(),before=cin.nextLine(),after=cin.nextLine();
  6.     before=” “+before+” “;
  7.     after=” “+after+” “;
  8.     str=” “+str+” “;//加上首尾空格
  9.     while(true)
  10.     {
  11.       if(str.indexOf(before)==-1) break;
  12.       str=str.replaceFirst(before, after);
  13.     }
  14.     System.out.println(str.trim());
  15.   }
  16. }

第三种方法的代码:

  1. import java.util.Scanner;
  2. public class Main {
  3.     public static void main(String[] args){
  4.         Scanner sc=new Scanner(System.in);
  5.         String s=sc.nextLine();
  6.         String s1=sc.next();
  7.         String s2=sc.next();
  8.         String[] a=s.split(” “);
  9.         for(int i=0;i<a.length;i++){
  10.             if(a[i].equals(s1))
  11.                System.out.print(s2+” “);
  12.             else
  13.                 System.out.print(a[i]+” “);
  14.         }
  15.         sc.close();
  16.     }
  17. }

第四种方法:

  1. import java.util.*;
  2. public class Main {
  3.   public static void main(String[] args){
  4.     Scanner cin=new Scanner(System.in);
  5.     String str=cin.nextLine(),before=cin.nextLine(),after=cin.nextLine();
  6.     before=” “+before+” “;
  7.     after=” “+after+” “;
  8.     str=” “+str+” “;//加上首尾空格
  9.     str=str.replaceAll(before,after);
  10.     System.out.println(str.replaceAll(before,after).trim());
  11.   }
  12. }

4:回文子串

描述

给定一个字符串,输出所有长度至少为2的回文子串。

回文子串即从左往右输出和从右往左输出结果是一样的字符串,比如:abba,cccdeedccc都是回文字符串。

输入一个字符串,由字母或数字组成。长度500以内。输出输出所有的回文子串,每个子串一行。
子串长度小的优先输出,若长度相等,则出现位置靠左的优先输出。样例输入

123321125775165561

样例输出

33
11
77
55
2332
2112
5775
6556
123321
165561

思路:枚举长度,然后遍历找符合条件的子串,输出,三重循环

  1. import java.util.Scanner;
  2. public class Main {
  3.      public static void main(String[]args) {
  4.        Scanner cin=new Scanner(System.in);
  5.        String s=cin.nextLine();
  6.        char str[]=s.toCharArray();
  7.        int n=s.length();
  8.        int i=0;
  9.        for(int len=2;len<=n;len++)
  10.           {
  11.               int maxBegin=n-len;
  12.               for(int begin=0;begin<=maxBegin;begin++)
  13.               {
  14.                   int j=begin+len-1;
  15.                   for(i=begin;i<j;i++,j–)
  16.                   {
  17.                       if(str[i]!=str[j]) break;
  18.                   }
  19.                   if(i>=j)
  20.                   {
  21.                       j=begin+len-1;
  22.                       for(i=begin;i<=j;i++) System.out.print(str[i]);
  23.                       System.out.println();
  24.                   }
  25.               }
  26.           }
  27.      }
  28. }

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!

思路:注意排序器的使用

  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. import java.util.Collections;
  4. import java.util.Comparator;
  5. import java.util.List;
  6. import java.util.Scanner;
  7. public class Main {
  8.   public static void main(String args[]){
  9.     Scanner cin=new Scanner(System.in);
  10.     String mode=cin.nextLine();
  11.     List<String> list = new ArrayList();
  12.     int n=cin.nextInt(),flag=0;
  13.     cin.nextLine();
  14.     if(mode.equals(“inc”)) flag=1;//自然
  15.     else if(mode.equals(“dec”)) flag=2;//自然逆序
  16.     else if(mode.equals(“ncinc”)) flag=3;//忽略大小写
  17.     else if(mode.equals(“ncdec”)) flag=4;//忽略大小写逆序
  18.     for(int i=0;i<n;i++) {
  19.       list.add(cin.nextLine());
  20.     }
  21.     if(flag==1)
  22.     {
  23.       Collections.sort(list);
  24.     }else if(flag==2) {
  25.       Collections.sort(list,new Sort2());
  26.     }else if(flag==3) {
  27.       Collections.sort(list,new Sort3());
  28.     }else if(flag==4) {
  29.       Collections.sort(list,new Sort4());
  30.     }
  31.     for(int i=0;i<n;i++) {
  32.       System.out.println(list.get(i));
  33.     }
  34.   }
  35.   static class Sort2 implements Comparator<String> {
  36.         public int compare(String o1, String o2) {
  37.             return -o1.compareTo(o2);
  38.         }
  39.     }
  40.   static class Sort3 implements Comparator<String> {
  41.         public int compare(String o1, String o2) {
  42.             return o1.compareToIgnoreCase(o2);
  43.         }
  44.     }
  45.   static class Sort4 implements Comparator<String> {
  46.         public int compare(String o1, String o2) {
  47.             return -o1.compareToIgnoreCase(o2);
  48.         }
  49.     }
  50. }

发布者

deng

听闻余生久不遇,相逢别错过。

《Java测试3》上有1条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注