import java.util.Arrays;
public class StringSort {
/*
* 需求:
* 给定一个字符串数组。按照字典的顺序进行从小到大的排序
* {"nba","abc","cba","zz","qq","lala","nima","haha","iloveyou"}
*
* 思路:
* 1)排序首先想到的是对整数的排序,对字符串能否排序?
* 1.1)通过查阅api文档,发现在String类下有一个用于比较字符串大小的方法:
* compareTo(String anotherString) 按字典顺序比较两个字符串,返回值类型是Int
* 2)用冒泡法对字符串数组进行排序。
*
* 分析:
* 1)创建一个能够对字符串数组排序的方法,把该数组丢给该参数让其排序
* 2)比较分为外圈和内圈
* 2.1)外圈比较的是比较的次数,简单的理解就是数组第几个角标开始比。
* 2.2)内圈比较的意义,简单点说就是外圈第几个角标给开始,与后面每一个角标元素比较,每一次
* 比较后小的数就往左边移,直到所有的数比较完为止。
*
*
*/
public static void main(String[] args) {
String[] arr = {"nba","abc","cba","zz","qq","lala","nima","haha","iloveyou"};
System.out.println("arr0:"+Arrays.toString(arr));
stringSort(arr);
System.out.println("arr1:"+Arrays.toString(arr));
}
private static void stringSort(String[] arr) {
//外圈,length-1的目的是比较到倒数第二个数是就可以全部比较完
for(int i = 0;i<arr.length-1;i++){
//内循环,从i+1开始比较
for(int j =i+1;j<arr.length;j++){
if(arr[i].compareTo(arr[j]) > 0){
String temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
}
输出结果:
arr0:[nba, abc, cba, zz, qq, lala, nima, haha, iloveyou]
arr1:[abc, cba, haha, iloveyou, lala, nba, nima, qq, zz]
字符串indexOf+subString方法练习
/*
* 需求:
* 求一个字符串在整串中出现的次数:
* 例如:"asdf"在"asdfjijlasdfijiupasdfuoyooasdfdiuasdfoasdiyp"出现的次数。
*
* 思路:
* 1)判断一个指定的字符串是否在整串中存在,这个可以用到String类中的indexOf方法。
* 如果字符串参数作为一个子字符串在此对象中出现,则返回第一个这种子字符串的第一个字符的索引;
* 如果它不作为一个子字符串出现,则返回 -1。
* 2)indexOf方法只能判断指定的字符串是否在整串中存在,并且记录下来该指定的字符串第一次出现的索引的位置。
* 2.1)如果有一个方法能够通过索引位置去切割整个字符串就好了,这样就可以通过不断的切割就可以判断整个字符串
* 有几个指定的字符串出现。
* 而在api中的String类中有一个substring(int beginIndex)方法返回一个新的字符串,它是此字符串的一个子字符串。
* 3)即可以通过不断的去判断,切割比完整个字符串。
*
* 分析:
* 1)创建一个方法可以通过传递两个字符串参数a,b就可以得到一个返回为整数次数count的方法
*/
public class StringApperaTimes {
public static void main(String[] args) {
String key = "asdf";
String str = "asdfjijlasdfijiupasdfuoyooasdfdiuasdfoasdiyp";
int count = getKeyStringCount(str,key);
System.out.println("count="+count);
}
/**
* 判断字符串key在字符串str中出现的次数
* @param str 字符串长串
* @param key 字符串短串
* @return
*/
private static int getKeyStringCount(String str, String key) {
//定义一个记录出现次数的变量
int count = 0;
//初始化索引值为
int index = 0;
//通过indexof判断key在str第一次出现的角标所以
while((index = str.indexOf(key) )!=-1){
//从指定索引位置开始去切割字符串,切割后的字符串作为字符串。
str = str.substring(index+key.length());
System.out.println("index="+index);
count++;
}
//zhu每一次while内部语句完成后index都会重新初始化,这个涉及到内部外部参数的取值问题
return count;
}
}
输出结果:
index=4
index=5
index=5
index=3
count=5
注意每一次while内部语句完成后index都会重新初始化。从输出结果index每一次变化值就可以看出