JAVA练习String类
一、字符串数组排序
1.给定一个字符串数组,按照字典顺序进行从小到大排序。
例如:将: {"nba","abc","cba","zz","ihg","hehe"};中的字符串按照字典顺序大小排列。
public class StringTest { public static void main(String[] args) { String[] arr = {"nba","abc","cba","zz","ihg","hehe"}; printArray(arr); //输出字符串 sortString(arr); //排序 printArray(arr); } private static void printArray(String[] arr) { for(int i = 0;i<arr.length;i++){ if (i != arr.length -1 ){ System.out.print(arr[i]+","); } else{ System.out.println(arr[i]); } } } private static void sortString(String[] arr) { //使用简单选择排序 for(int i = 0;i<arr.length-1;i++){ for(int j= i+1;j<arr.length;j++ ){ if (arr[i].compareTo(arr[j])>0){ swap(arr,i,j); } } } } private static void swap(String[] arr, int i, int j) { String temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } }
2.一个子串在整串中出现的次数
例如:字符串:"ngbnbajhjnnbakygdnba"中关键字Key:"nba"出现的次数。
思路:使用String类的indexOf方法获取关键字是否在字符串中存在,若存在则返回角标位置,使用获取的角标加上关键字长度,从新的起始位置来判断关键字是否在剩余的子串中存在。使用循环结构判断。
public class StringTest2 { public static void main(String[] args) { String arr = "ngbnbajhjnnbakygdnba"; String key = "nba"; int count = getKeyStringCount(arr,key); System.out.println("count = "+count); } private static int getKeyStringCount(String arr, String key) { int count =0; int index = 0; while((index = arr.indexOf(key,index))!=-1){ //当字符串中从index角标开始没有key子串是退出循环 index = index + key.length(); //新的循环,从上一个发现子串的角标位置开始查询key子串 count++; } return count; } }
3.最大相同子串
例如:字符串:str1:“tanfaidasdbabcdgdsalkdm”
str2:“hdkvasabcdsdafmvmoae”
在str1与str2中寻找最大的相同的子串。
思路:
(1)观察较短字符串本身是否为较字符串的子串,若是,则最大子串为较短字符串本身。
(2)若不是,将较短字符串逐步递减,取得其不同子串,使用其不同的子串来判断是否在较长字符串中存在。
public class StringTest3 { public static void main(String[] args) { String str1 = "tanfaidasdbabcdgdsalkdm"; String str2 = "hdkvasabcdsdafmvmoae"; String s = getMaxSubString(str1,str2); System.out.println("Max_String = "+s); } private static String getMaxSubString(String str1, String str2) { String max,min; max = (str1.length()>str2.length())?str1:str2; min = (max.equals(str1))?str2:str1; //判断两字符串的长度,使用max,min存储字符串 for (int i=0;i<min.length();i++){ for(int a=0,b=min.length()-i;b<min.length();a++,b++){ String sub = min.substring(a,b); if(max.indexOf(sub)>0){ return sub; } } } return null; } }
4.模拟一个tirm功能的方法,去除字符串两端的空白
思路:从字符串两端循环判断下一个角标的元素是否为空格,当都遇到不为空的字符时停止且返回角标,同时头标记的角标不能大于尾标记。
public class StringTest4 { public static void main(String[] args) { String str = " __ahbh__ "; str = myTirm(str); System.out.println(str); } private static String myTirm(String str) { int start =0 ,end = str.length()-1; while(start<=end&&str.charAt(start)==' '){ start++; } while(start<=end&&str.charAt(end)==' '){ end--; } return str.substring(start,end+1); } }
import com.sun.scenario.effect.impl.sw.java.JSWColorAdjustPeer;
public class StringTest {
public static void main(String[] args) {
String[] arr = {"nba","abc","cba","zz","ihg","hehe"};
printArray(arr); //输出字符串
sortString(arr); //排序
printArray(arr);
}
private static void printArray(String[] arr) {
for(int i = 0;i<arr.length;i++){
if (i != arr.length -1 ){
System.out.print(arr[i]+",");
}
else{
System.out.println(arr[i]);
}
}
}
private static void sortString(String[] arr) { //使用简单选择排序
for(int i = 0;i<arr.length-1;i++){
for(int j= i+1;j<arr.length;j++ ){
if (arr[i].compareTo(arr[j])>0){
swap(arr,i,j);
}
}
}
}
private static void swap(String[] arr, int i, int j) {
String temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}

浙公网安备 33010602011771号