JAVA测验-3 题解

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课在此告一段落

 

 

点赞

发表评论

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

15 + 11 =