package cn.itcast.p1.string.demo;
import com.sun.xml.internal.ws.encoding.soap.SOAP12Constants;
/*4.模拟一个trim功能一致的方法,去除字符串两端的空白
* 思路:
* 1.定义两个变量
* 一个变量作为从头开始判断字符串空格的角标,不断++
* 一个变量作为从尾开始判断字符串空格的角标,不断--
* 2.判断到不是空格为止,取头尾之间的字符即可
* */
public class StringTest {
public static void main(String[] args) {
//StringTest1();
//StringTest2();
//StringTest3();
StringTest4();
}
public static void StringTest4() {
String s = " ab c de ";
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);
}
/*
* --------------------------------------------------------------------------------
*/
/*3.两个字符串中最大相同的子串.
* 思路:
* 1.既然取的是最大子串,先看短的那个字符串是否在长的那个字符串中,如果存在,短的哪个字符串就是最大子串
* 2.如果不是呢,那么就将短的那个子串进行长度递减的方式取子串,去长串中判断是否存在,如果存在就已找到,就不用再找了。
*/
public static void StringTest3() {
String s1 = "asssdabcdfisvb";
String s2 = "hjsnabcdju";
String s = getMaxSubstring(s1,s2);
System.out.println("s="+s);
}
/*
* 获取最大相同子串
*/
public static String getMaxSubstring(String s1, String s2) {
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;
}
/*
* -----------------------------------------------------------------------
*/
/*
* * 2.一个子串在整串中出现的次数。
* "nbashunbasfihinbahihfnbaifuhdnba"
*
* 思路:
* 1.要找的子串是否存在,如果存在获取其出现的位置,可使用indexOf完成.
* 2.如果找到了,那么就记录出现的位置并在剩余的字符串中继续查找此子串,而
* 剩余字符串的其实位为 出现位置+子串长度.
* 3.以此类推,通过循环来完成查找,如果找不到就是-1.并对每次找到的子串用计数器记录.
*
*/
public static void StringTest2() {
String str = "nbashunbasfihinbahihfnbaifuhdnbadaabnba";
String key = "nba";
int count = getkeyStringCount_2(str,key);
System.out.println("count="+count);
}
public 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;
}
/*
* 获取子串在整串中出现的次数
*/
public static int getkeyStringCount(String str, String key) {
//定义计数器.
int count = 0;
//定义变量记录key出现的位置
int index = 0;
while((index = str.indexOf(key))!=-1){
str = str.substring(index+key.length());
count++;
}
return count;
}
/*
* -----------------------------------------------------------------------
*/
/*
* 1.给定一个字符串数组,按照字典顺序进行从小到达的排序。
* {"nab","abc","cba","zz","qq","haha"}
*
* 思路:
* 1.对数组排序,可以用选择,冒泡都行。
* 2.for嵌套和比较及换位。
* 3.问题,以前排的是整数,比较用的比较运算符,现在是字符串对象。
* 字符串对象怎么比较呢?对象中提供了用于字符串对象比较的功能。
* */
private static void StringTest1() {
String [] arr = {"nab","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)
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;
}
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.print(arr[i]+"]");
}
}
}
|
|