1.给定一个字符串数组,按照字典顺序进行从小到大的排序。
{"nba","abc","cba","zz","qq","haha"}
思路:
1,对数组排序,可以用选择,冒泡都行。
2,for嵌套和比较换位
3,问题:以前排的是整数,比较用的比较运算符,现在是字符串对象,
而字符串对象提供了用于字符串对象比较的功能
public class Test1 {
public static void main(String[] args) {
String[] arr={"nba","abc","cba","zz","qq","haha"};
printArray(arr);
sortString(arr);
printArray(arr);
}
public 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)//字符串比较用compareTo
swap(arr,i,j);
}
}
}
public static void swap(String[] arr, int i, int j) {
String temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
public static void printArray(String[] arr) {
System.out.print("[");
for(int i=0;i<arr.length;i++){
if(i!=arr.length-1)
System.out.print(arr[i]+",");
else
System.out.println(arr[i]+"]");
}
}
}
运行:
2,一个子串在整串中出现的次数
"nbaernbatynbauinbaopnba"
思路:
1.使用indexOf获取其出现的位置
2.如果找到了,记录位置并在剩余的字符串中继续查找该子串,
而剩余字符串的起始位的出现位置+子串长度
3.以此类推,通过循环完成查找,如果找不到就是-1,并对 没词找到用计数器记录。
public class Test2 {
public static void main(String[] args) {
String str="nbaernbatynbauinbaopnba";
String key="nba";
// getKeyStringCount(str,key);
int count=getKeyStringCount_2(str,key);
System.out.println("count="+count);
}
// 获取子串在整串中出现的次数。
public static int getKeyStringCount(String str, String key) {
// 1,定义计数器
int count=0;
// 2,定义变量记录key出现的位置
int index=0;
while((index=str.indexOf(key))!=-1){
str=str.substring(index+key.length());
count++;
}
return count;
}
private static int getKeyStringCount_2(String str, String key) {
int count=0;
int index=0;
while((index=str.indexOf(key,index))!=-1){
index=index+key.length();
count++;
}
return count;
}
}
运行:
3,两个字符串中最大相同子串。
"qwerabcdtyuiop"
"xcabcdvbn"
思路:
1先看短的那个字符串是否在唱的那个字符串中
若存在,短的那个字符串就是最大子串
2如果不是,就将短的字符串进行长度递减的方式去掉子串,去长传中判断是否存在。
如存在就已找到,就不用再找了。
public class Test3 {
public static void main(String[] args) {
String s1="qwerabcdtyuiop";
String s2="xcabcdvbn";
String s=getMaxSubstring(s2,s1);
System.out.println("s="+s);
}
public static String getMaxSubstring(String s2, String s1) {
String max=null,min=null;
max=(s1.length()>s2.length())?s1:s2;
min=max.equals(s1)?s2:s1;
System.out.println("max="+max);
System.out.println("min="+min);
for(int i=0;i<min.length();i++){
for(int a=0,b=min.length()-i;b!=min.length()+1;a++,b++){
String sub=min.substring(a,b);
System.out.println(sub);
if(max.contains(sub))
return sub;
}
}
return null;
}
}
运行:
4,模拟一个trim功能一致的方法,去除字符串两边的空白
思路:
1.定义两个变量
一个变量从头开始判断字符串空格的角标。不断++
一个变量从尾开始判断字符串空格的角标,不断--
2.判断不是空格为止,取头尾之间的字符串即可
public class Test4 {
public static void main(String[] args) {
String s=" ab c ";
s=myTrim(s);
System.out.println("-"+s+"-");
}
public static String myTrim(String s) {
int start=0,end=s.length()-1;
while(start<=end&&s.charAt(start)==' '){
start++;
}
while(start<=end&&s.charAt(end)==' '){
end--;
}
return s.substring(start,end+1);
}
}
运行:
网友评论