package string;
import java.security.PrivateKey;
/*
* 一个子串在整串中出现的次数。"nbaernbatynbauinbaopnba"
*
* 思路:
* 1, 要找的子串是否存在,如果存在获取其出现的位置。这个可以使用indexOf完成。
* 2, 如果找到了,那么就记录出现的位置并在剩余的字符串中继续查找该子串,
* 而剩余字符串的起始位是出现位置+子串的长度.
* 3, 以此类推,通过循环完成查找,如果找不到就是-1,并对 每次找到用计数器记录。
*
* indexOf(String str,int num),length()方法的运用
*
*/
public class StringTest {
static String str="nbaernbatynbauinbaopnba";
static String key="nba";
public static void main(String[] args) {
int count=getKeyStringCount(str,key);
sop("count="+count);
}
public static int getKeyStringCount(String str,String key){
int index=0;
int count=0;
/*
* 从index位置开始查找,
* 子字符串是否在父字符串中,如果在,则返回该子字符串的位置,
* 如果没有则返回-1,循环结束
*/
while((index=str.indexOf(key, index))!=-1){
index=index+key.length();
count++;
}
return count;
/*
* 不建议用此方法,因为此方法会生成很多字符串,占用内存空间
while((index=str.indexOf(key))!=-1){
str=str.subString(index+key.length());
count++;
}
return count;
*/
}
public static void sop(Object obj){
System.out.println(obj);
}
package string;
/*
* 两个字符串中最大相同的子串。
* "qwerabcdtyuiop"
* "xcabcdvbn"
*
* 思路:
* 1, 既然取得是最大子串,先看短的那个字符串是否在长的那个字符串中。
* 如果存在,短的那个字符串就是最大子串。
* 2, 如果不是呢,那么就将短的那个子串进行长度递减的方式去子串,去长串中判断是否存在。
* 如果存在就已找到,就不用在找了。
*
* indexOf(String str,int num),substring(int a,int b),contains(String str),length()方法的运用
*
*/
public class StringTest2 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
String s1="qwerabcdtyuiop";
String s2="xcabcdvbn";
String max=getMaxSubString(s1,s2);
sop("max="+max);
}
public static String getMaxSubString(String s1,String s2){
String max,min;
max=(s1.length()>s2.length())?s1:s2;
min=(s1.length()>s2.length())?s2:s1;
for(int i=0;i<min.length();i++){
//因为字符不包括最后的位置
for(int a=0,b=min.length()-i;b!=min.length()+1;a++,b++){
String temp=min.substring(a, b);
if(max.indexOf(temp)!=-1)
//或者
//if(max.contains(temp))
return temp;
}
}
return null;
}
public static void sop(String str){
System.out.println(str);
}
}
package string;
/*
* 模拟一个trim功能一致的方法。去除字符串两端的空白
*
* 思路:
* 1,定义两个变量。
* 一个变量作为从头开始判断字符串空格的角标。不断++。
* 一个变量作为从尾开始判断字符串空格的角标。不断--。
* 2,判断到不是空格为止,取头尾之间的字符串即可。
*
* charAt(int index)
*
*/
public class StringTest3 {
public static void main(String[] args) {
/*
String s=" ffghfghg ";
System.out.println(s.trim());
*/
String s=" fhgh ";
s=myStrim(s);
System.out.println(s);
}
public static String myStrim(String s){
int start=0,end=s.length()-1;
//分别找到两边不为空格的角标
while(start<=end && s.charAt(start) == ' '){
start++;
}
while (start<=end && s.charAt(start) == ' '){
end--;
}
//因为最后一个位置不包括,所以需要+1
return s.substring(start, end+1);
}
}