算法1:模拟trim方法去掉字符串首尾空格
package StringTest;
import org.junit.Test;
/**算法1:
* 模拟trim方法去掉字符串首尾空格
*
* @author ZAW
*/
public class StringTrimTest {
@Test
public void Testtrim(){
String str = " bmfd lb ";
System.out.println(Trim(str));
}
public String Trim(String str){
//模拟trim()
String newStr="";
int star=0;
int end=-1;
//获取前标
for (int i = 0; i < str.length(); i++) {
if(str.charAt(i)!=' '){
star=i;
break;
}
}
//获取后标
for (int i = str.length()-1; i >=0; i--) {
if(str.charAt(i)!=' '){
end=i;
break;
}
}
//存入新字符串
for(int i=star;i<=end;i++){
newStr+=str.charAt(i);
}
return newStr;
}
}
算法2:字符串反转指定部分
package StringTest;
import org.junit.Test;
/**算法2:
* 字符串反转指定部分
* 方法1.转为char[]数组
* @author ZAW
*/
public class StringCharReverse {
//方式1:
public String reverse(String str,int startindex,int endindex){
if (str != null) {
char[] arr = str.toCharArray();
for (int x = startindex,y = endindex; x < y; x++,y--) {
char temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
return new String(arr);
}
return null;
}
// 方式2:
public String reverse1(String str,int startindex,int endindex){
if (str != null) {
String reverseStr = str.substring(0,startindex);
for (int i = endindex; i >= startindex ; i--) {
reverseStr += str.charAt(i);
}
reverseStr += str.substring(endindex+1);
return reverseStr;
}
return null;
}
// 方式3:
public String reverse2(String str,int startindex,int endindex){
if (str != null) {
StringBuilder builder = new StringBuilder(str.length());
builder.append(str.substring(0,startindex));
for (int i = endindex; i >= startindex ; i--) {
builder.append(str.charAt(i));
}
builder.append(str.substring(endindex+1));
return builder.toString();
}
return null;
}
//方式4:
public String reverse3(String str,int startindex,int endindex){
if (str != null) {
StringBuilder builder = new StringBuilder(str.length());
// 字符串前面
builder.append(str.substring(0,startindex));
// StringBuilder builder1 = new StringBuilder(str.substring(0,startindex));
// 字符串中间,需要反转的部分
StringBuilder builder2 = new StringBuilder(str.substring(startindex, endindex+1));
StringBuilder builder3 = builder2.reverse();
// 将前面的与中间的后面的连接
builder.append(builder3).append(str.substring(endindex+1));
// StringBuilder builder4 = new StringBuilder(str.substring(endindex + 1));
// StringBuilder builder5= new StringBuilder(builder1.append(builder3).append(builder4));
return builder.toString();
}
return null;
}
@Test
public void testreverse(){
String str = "abcdefgh";
String reverse = reverse3(str,2,5);
System.out.println(reverse);
}
}
算法3:获取一个字符串在另一个字符串中出现的次数
package StringTest;
import org.junit.Test;
/**算法3:
* 获取一个字符串在另一个字符串中出现的次数
* 分析:
* 基础:KMP算法
* 进阶:利用字符串函数indexOf()
* @author ZAW
*/
public class StringCharCount {
@Test
public void test1(){
String str1 = "adhgofhgohgohgo";
String str2 = "hgo";
System.out.println(StringCount(str1, str2));
}
public int StringCount(String str1,String str2){
int count = 0;
int index = 0;
int length1 = str1.length(); //str1长度
int length2 = str2.length(); //str2长度
if (length1 >= length2) { //保证str1是主串
// 方式1:indexOf()返回首个出现相同字符的位置,
// 那么就可以用indexOf()比较相同的子串,之后只要将下标移动index+str2.length则可以循环与str1比较
// while ((index =str1.indexOf(str2)) != -1 ) {
// count++;
// str1 = str1.substring(index+str2.length()); //截取了相同部分之后的剩余串并重新赋给str1继续比较
//
// }
// 方式2:相对于方式1 不用多次造新串节约内存
while ((index = str1.indexOf(str2,index)) != -1){
count++;
index += length2;
}
return count;
}
else{
return 0;
}
}
}
算法4:获取两个字符串最大相同子串
package StringTest;
import org.junit.Test;
/**算法4:
* 获取两个字符串最大相同子串
* 目前只能返回一个,存在多个(待优化)
* @author ZAW
*/
public class StringMaxSubstring {
public String getMaxString(String str1,String str2){
if (str1 != null &str2 != null) {
String Maxstr = (str1.length() >= str2.length()) ? str1 : str2; //得到较大的串
String Minstr = (str1.length() <= str2.length()) ? str1 : str2; //得到较小的串
int length = Minstr.length(); //用小的串与大的比较需要小串的长度
for (int i = 0; i < length; i++) {
for (int x = 0,y=length-i; y<=length ; x++,y++) {
String substr = Minstr.substring(x,y); //截取字符
if(Maxstr.contains(substr)){ //判定截取的是否在
return substr;
}
}
}
}
return null;
}
@Test
public void test(){
String str1 = "abcheloher";
String str2 = "hell";
String getstring = getMaxString(str1,str2);
System.out.println(getstring);
}
}
算法5:对字符串进行自然顺序排列
package StringTest;
import org.junit.Test;
import java.util.Arrays;
/**算法5:
* 对字符串进行自然顺序排列
* @author ZAW
*/
public class StringScout {
@Test
public void test() {
String str = "fdsafasf";
String s = Sort(str);
System.out.println(s);
}
private String Sort(String str) {
//把字符串转化成字符数组
char[] ch = StringtoCharArray(str);
//对字符数组进行排序
CharSort(ch);
//把字符数组转化成字符串
String str1 = new String(ch);
return str1;
}
//对字符数组进行排序
private void CharSort(char[] ch) {
Arrays.sort(ch);
}
//把字符串转化成字符数组
private char[] StringtoCharArray(String str) {
return str.toCharArray();
}
}