JAVA语言基础(五)——字符串(逆置)

xiaoxiao2025-11-11  6

一、String下的方法

package practise; import java.util.Arrays; import java.util.Scanner; public class StringMethod { public static String leftTurn(String str){ return str; } public static void main(String[] args) { /*Scanner s = new Scanner(System.in); String str1 = s.nextLine(); // System.out.println(str1);*/ System.out.println("========.charAt(int)========="); String str2 = "helloworld"; System.out.println("str2的长度:" + str2.length()); System.out.println(str2.charAt(0));//h 返回字符串该下标对应的字符 System.out.println("========.codePointAt(int)========="); String str3 = "abcd"; System.out.println(str3.codePointAt(0));//97 返回该下标对应字符的编码 System.out.println("=========.codePointBefore(int)========"); System.out.println(str3.codePointBefore(1));//97 返回该下标的前一个字符的编码 System.out.println("=======.getChars(int,int,char[],int)=========="); String str4 = "asdfgh"; char[] arr = new char[6]; char[] arr2 = new char[6]; str4.getChars(0,5,arr,0);//将字符串复制到一个字符数组 //str4.getChars(arr2,2); 报错 System.out.println(str4); System.out.println(arr); System.out.println("========.equals(String)=========");//将两个字符串进行比较 String str5 = "qweert"; String str6 = "qweert"; String str7 = "qwerrt"; System.out.println(str5.equals(str6));//true System.out.println(str5.equals(str7));//false System.out.println("===========.equalsIgnoreCase(String)===================");//不区分大小写的比较两个字符串 String str11 = "Qweert"; System.out.println(str11.equalsIgnoreCase(str5));//true System.out.println("========.subString(int,int)========="); String str8 = "substring"; String str9 = str8.substring(1,4);//将str8的1~4(不包括4)复制到str9 容易计算子串的长度 System.out.println(str9); System.out.println("========修改========="); String str10 = str8.substring(0,3) + "sub";//先提取需要的字符,在拼接上新添加的字符 System.out.println(str10); System.out.println("========+拼接========="); String s = "hello"; String s2 = "world"; String s3 = s + s2;//按顺序拼接 System.out.println(s3); int a = 123; String s4 = s + a;//不是String类型,在拼接时也会转换成字符串型 System.out.println(s4); System.out.println("===========.toCharArray()=============="); String strr = "aaaaaaaaaa";//将字符串转换为字符数组 char[] ch = strr.toCharArray(); System.out.println(Arrays.toString(ch)); System.out.println("========.copyValueOf=============");//将数字元素复制成字符串 String strr2 = String.copyValueOf(ch); System.out.println(strr2); } }

二、练习

1.字符串左旋 如abcdefg——》cdefab

//左旋 abcdefg——》cdefab package demo; import java.util.Arrays; import java.util.Scanner; public class Demo1024 { public static char[] leftTurn(char[] array,int a){//左旋a个字符 char tmp = 0; for(int i = 0;i < a / 2;i ++){//前a个元素逆序 tmp = array[i]; array[i] = array[a - 1 - i]; array[a - 1 - i] = tmp; } for(int j = a;j < (array.length + a) / 2;j ++){//剩下的元素逆序 tmp = array[j]; array[j] = array[array.length - 1 + a - j]; array[array.length - 1 + a - j] = tmp; } for(int k = 0;k < array.length / 2;k ++){//将整个数组逆序 tmp = array[k]; array[k] = array[array.length - 1 - k]; array[array.length - 1 - k] = tmp; } return array; } public static char[] toArray(String str){//字符串转化为字符数组 char[] arr = new char[str.length()];//新建一个长度为该字符串长度的字符型数组 str.getChars(0,str.length(),arr,0);//将字符串复制到数组内 //System.out.println(arr); return arr; } public static void main(String[] args) { System.out.println("请输入一个字符串:"); Scanner s = new Scanner(System.in); String str = s.nextLine(); // char[] arr1 = toArray(str); // System.out.println(arr1); // System.out.println(Arrays.toString(arr1)); char[] arr = leftTurn(toArray(str),3); // System.out.println(Arrays.toString(arr)); System.out.println(arr); } } package demo; import java.util.Scanner; public class Demo1026 { //将一个字符串的某部分逆序 public static String reverse(String str,int begin,int end){ char[] ch = str.toCharArray();//字符串转换成数组 char tmp = 0;//中间变量 while(begin < end){//开始和结束部分没有相遇,进入循环 //交换 tmp = ch[begin]; ch[begin] = ch[end]; ch[end] = tmp; begin ++;//开始位置为下一个下标 end --;//结束位置为前一个下标 } return String.copyValueOf(ch);//返回字符串 } public static void leftRoadString(String str,int n){//左旋 if(str ==null || n < 0 || n > str.length()){ return; } int left = 0; int leftend = n - 1; int right = n; int rightend = str.length() - 1; str = reverse(str,left,leftend); str = reverse(str,right,rightend); str = reverse(str,left,rightend); System.out.println(str); } public static void main(String[] args) { System.out.println("输入一个字符串:"); Scanner s = new Scanner(System.in); String str = s.nextLine(); System.out.println(str); leftRoadString(str,2); } }

2.一句话中的单词逆置,"Here is Tulun" ===> "Tulun is Here"

package demo; import java.util.Scanner; public class ReversrSentence { public static void reverse(char[] ch,int begin,int end){ char tmp = 0; while(begin < end){ tmp = ch[begin]; ch[begin] = ch[end]; ch[end] = tmp; begin ++; end --; } } public static String reverseSentence(String str){ if(str == null){ return null; } char[] ch = str.toCharArray(); reverse(ch,0,ch.length - 1);//整体逆置 int i = 0;//单词开始 int j = 0;//单词结束 while(i < ch.length){ if(ch[j] == ' ' || j == str.length()){//j是空格,i~j的部分逆置 reverse(ch,i,--j); i = ++j; }else if(ch[i] == ' '){//i是空格,i向后走作为下一个单词的开始 i ++; j ++; }else{//都不是空格,j向后走,寻找单词的结束 j ++; } } return String.copyValueOf(ch); } public static void main(String[] args) { Scanner s = new Scanner(System.in); String str = s.nextLine(); System.out.println(reverseSentence(str)); } }

 

转载请注明原文地址: https://www.6miu.com/read-5039431.html

最新回复(0)