字符串java习题

1.字符串中方法的应用

【问题描述】按要求将程序填充完整

class StringExample{

 public static void main(String[] args){

     String  s1 = new String("china");

     String  s2 = "china";

     if(   s1.equals(s2)                  ){   //判断s1和s2串值是否相同
     /*
    在Java中,s1==s2判断的是s1和s2两个对象的引用是否相同,而不是它们所包含的字符串值是否相同。因此,即使s1和s2包含完全相同的字符串值,但如果它们是由不同的对象引用的,它们仍然被认为是不同的。要比较s1和s2的字符串值是否相同,应该使用s1.equals(s2)方法。这个方法会检查s1和s2所包含的字符串值是否相等。
     */

          System.out.println("s1=s2");

     }else{

          System.out.println("s1!=s2");

     } 

     String s3 = new String("320106199105120467");

     if(    s3.startsWith("320106")               ){   //判断s3的前缀是否是“320106”

           System.out.println("JiangShu Nanjing ID");

      }

      int position = 0;

      String path = "d:\\javaKK\\src\\Lesson3\\example.java";
       // '\\'转义字符
      position =  path.lastIndexOf("\\")  ;         //获取path中最后出现目录分隔符号的位置

      System.out.println("\\ last position in path is:"+position);

      String fileName =  path.substring(22) ;         //获取path中的文件名"example.java",22是e在字符串里的index

      System.out.println("fileName = "+fileName);

      String s4="100";

      String s5="123.678";

      String s6 =    new StringBuffer(s5).reverse().toString();                  //将s5反转为"876.321"赋给s6
      /*
      该行代码将字符串变量 s5 转换成 StringBuffer 对象,然后对其进行翻转(reverse),最后再将翻转后的结果转换成 String 类型并赋值给新的字符串变量 s6。简而言之,该行代码的作用是将字符串 s5 反转,并把反转后的结果存储到 s6 中。
      */

      int num1 =   Integer.parseInt(s4)     ;             //将字符串s4转化成int
      //"parse" 是英文单词,意思是解析或分析。
      double num2 =       Double.parseDouble(s6)    ;      //将字符串s6转化成double
     
      double sum = num1+num2;

      System.out.println("sum = "+sum);

      String s7 = "ABCDEF";

     for(int i=0;i<s7.length();i++){

          System.out.print(s7.charAt(i));

      }
 System.out.print("\n");
      char arr[] =      s7.toCharArray();               //将s7存放到数组arr中

      for(int i=arr.length-1;i>=0;i--){

          System.out.printf("%3c",arr[i]);

      }

  }

}

【输入形式】

【输出形式】

s1=s2  
JiangShu Nanjing ID  
\ last position in path is:21  
fileName = example.java  
sum = 976.321  
ABCDEF  
  F  E  D  C  B  A

2.字符串中字符排序

【问题描述】编写一个程序,从键盘接收一个字符串,然后按照字符顺序从小到大进行排序,并删除重复的字符。

【输入形式】用户在第一行输入一个字符串。

【输出形式】程序按照字符(ASCII)顺序从小到大排序字符串,并删除重复的字符进行输出。
【样例输入】badacgegfacb

【样例输出】abcdefg

【样例说明】用户输入字符串badacgegfacb,程序对其进行按从小到大(ASCII)顺序排序,并删除重复的字符,最后输出为abcdefg

import java.util.*;

class StringSort{

 public static void main(String[] args){
     Scanner reader = new Scanner(System.in);
     String str = reader.nextLine();
     char[] arr = str.toCharArray();
	 String news = " ";
	 Arrays.sort(arr); 
	 String newStr =  new String(arr);
	 news += newStr.charAt(0);
	 for(int i = 1; i < arr.length; i++)
		 if(newStr.charAt(i)!= newStr.charAt(i - 1))
				news += newStr.charAt(i);
	  news += "\0";
	  System.out.println(news);
  }

}


3.单词倒转

【问题描述】编写一个程序,将输入的一段文本中的各个单词的字母顺序翻转

【输入形式】一行文本

【输出形式】一行单词倒置后的文本,以 . 结束

【样例输入】

To be or not to be

【样例输出】

oT eb ro ton ot eb.

import java.util.*;
public class Test3
{
  public static void main(String[] args)
  {
      int i;
      Scanner input=new Scanner(System.in);
      String str=input.nextLine();
      String[] words=str.split("\\s+");
      StringBuffer str1=new StringBuffer();
      for(i=0;i<words.length;i++)
      {
          StringBuffer str2=new StringBuffer(words[i]);
          str2=str2.reverse();
          str1.append(str2);
          if(i<words.length-1)
              str1.append(" ");
          else
              str1.append(".");
      }
      System.out.println(str1);
  }

}


4.字符串压缩

【问题描述】编程将一个字符串转化(压缩)

【样例输入】

aaaaabbccccccdaa

【样例输出】

a5b2c6d1a2

import java.util.*;
public class Test4 {
  public static String stringCompress(String str) {
      StringBuilder a = new StringBuilder();
      char[] b = str.toCharArray();
      char char1 = str.charAt(0);
      int count = 1;
      for (int i = 1; i < b.length; i++) {
          if (char1 == str.charAt(i)) {
              count++;
              continue;
          }
          a = a.append(char1).append(count);
          count = 1;
          char1=str.charAt(i);
          }
      a = a.append(char1).append(count);
      return a.toString();
      }
      public static void main(String[] args) {
      Scanner input=new Scanner(System.in);
      String str=input.nextLine();
      stringCompress(str);
      System.out.println(stringCompress(str));
  }
}



5.提取子串

【问题描述】从一个串s中提取子串,要求以start字符开始,并以end字符结束的内含子串。(内含串指包含start字符和end字符的串)

【输入形式】两行,第一行是一个给定字符串,第二行是start字符和end字符两个字符构成的字符串

【输出形式】一行以start字符开始,并以end字符结束的内含子串

【样例输入1】

 I   love  <china> and  people

 <>

【样例输出1】

 <china>

【样例输入2】

 I   love  <china> and  people

 <]

【样例输出2】

 <china> and  people

【样例输入3】

 I   love  <china> and  people

 ><

【样例输出3】

【样例说明】

如果找到了start,而end不存在,则取从start开始到结尾的所有字符,若start不存在,或start在end的后方则返回null

import java.util.*;
public class P3 {
    static Scanner in = new Scanner(System.in);
    static String delimitedString(String x,char start,char end)
    {
    	      	  String s3="";
  	      	            for(int i=0;i<x.length();i++)
  	      	            {
  	      	                if(x.charAt(i)==start)
  	      	                {
  	      	                    s3=s3+start;i++;
  	      	                    while(i<x.length()&&x.charAt(i)!=end)
  	      	                    {
  	      	                        s3=s3+x.charAt(i);
  	      	                        i++;
  	      	                    }
  	      	                    if(i<x.length())
  	      	                    {
  	      	                        s3=s3+end;
  	      	                    }
  	      	                    break;
  	      	                }
  	      	                if(x.charAt(i)==end) {
  	      	                    break;
  	      	                }
  	      	            }
  	      	    return s3;
    }
    public static void main(String[] args) {
    	 int n;
    	 String x,mod;
    	 char begin,end;
    	 x   =    in.nextLine();
      	 mod = in.nextLine();
    	 begin = mod.charAt(0);
    	 end  =  mod.charAt(1);
    	 String y;
    	 y = delimitedString(x,begin,end);
         if(y!=null)
    	       System.out.println(y);	 
    }
}

6.提取多个子串

【问题描述】
从一个串s中提取子串,要求以start字符开始,并以end字符结束的内含子串。(内含串指包含start字符和end字符的串)

【输入形式】
两行,第一行是一个给定字符串,第二行是start字符和end字符两个字符构成的字符串

【输出形式】
所有的内含子串,每个内含子串一行

【样例输入1】

I   love  <china> and  <people> ok

<>
【样例输出1】

【样例输入2】

  I   love  <china> and  <people> ok

<]

【样例输出2】

【样例说明】
如果start或end不存在,则返回null ,内含子串个数<=1000

import java.util.*;
class P3 {
    static Scanner in = new Scanner(System.in);
    static String[] delimitedString(String x,char begin,char end)
    {
    	  String[] s = new String [1000]; 
  	            	int j,t=0;
  	    
  	        		for(int i=0;i<x.length();i++)
  	        		{
  	        			if(begin == x.charAt(i))
  	        			{
  	        			    j = i;
  	        			    while( j < x.length() &&  x.charAt(j) != end )
  	        			    	j++;
  	        			    if(j < x.length()-1)
  	        			    {
  	    
  	        			    	s[t++] = x.substring(i , j+1);
  	                                   i=j;
  	        			    }
  	                 
  	        			}
  	        		
  	        		}
  	    return     Arrays.stream(s).filter(Objects::nonNull).toArray(String[]::new);
    }
    public static void main(String[] args) {
    	 int n;
    	 String x,mod;
    	 char begin,end;
    	 x = in.nextLine();
    	 mod = in.nextLine();
    	 begin = mod.charAt(0);
    	 end = mod.charAt(1);
    	 String[] y;
    	 y = delimitedString(x,begin,end);
    	 if(y!=null){
		 for(int i=0;i<y.length;i++){
		    	System.out.println(y[i]);
                 }
    	 }
    }
}



7.数字串转换

【问题描述】
编写方法把十进制数字串转换为用逗号隔开的数,从右边开始每三个数字之间用一个逗号隔开。

【样例输入】

1543729
【样例输出】

1,543,729

import java.util.*;
class P3 {
	  static Scanner in = new Scanner(System.in);
          static String change(String x)
          {
    	          StringBuilder s2 =new StringBuilder();
         	            for(int i=x.length()-1;i>=0;)
         	            {
         	                int j=0;
         	                while(j<3&&i>=0)
         	                {
         	                    s2.append(x.charAt(i));
         	                    i--;j++;
         	                }
         	                if(i>=0) {
         	                    s2.append(",");
         	                }
         	            }
         	            s2.reverse();
         	            x=s2.toString();
         	            return x;
          }
         public static void main(String[] args) {
    	        String  x,y;
    	        x = in.nextLine();
    	        y = change(x);
    	        System.out.println(y);
         }
}



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值