天天看點

擷取字元串中最長的子字元串

import org.junit.Test;

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

public class TestTrim {

String s1 = " ajjjjjj123 ";//帶空格字元串
String s2 = "";//不帶空格字元串

/*
 * 模拟trim()去掉帶空格字元串
 * */
@Test
public void test() {
    char[] chars = s1.toCharArray();
    for (char c : chars) {
        if (c != ' ') {
            s2 += c;
        }
    }
    System.out.println("字元串trim後" + s2);
}


/*
 * 擷取字元串中最長的子字元串
 * */

String str1 = "abcwenmrthelloyuiloodefccc";//字元串
String str2 = "cchelbnmyuiloefccc";//子字元串 18位

List<String> list;//存放str2所有可能的字元串情況
List<Integer> listLengths;//存放str2所有可能的字元串情況的長度

String[] strs = new String[str2.length()];// 存放字元每次從第一位遞減的字元串
String[] strsReverse = new String[str2.length()];// 存放字元串反轉後的元素

// 存放反轉後臨時字元串,每次遞減一位的字元串,18個字元串,得到每個元素從末尾遞減的每個元素
String strReverseTemp1;
// 對上面18個字元串再處理reverse回正向字元串
String strReverseTemp2;

@Test
public void test1() {
    list = new ArrayList();
    listLengths = new ArrayList();

    for (int j = 0; j < str2.length(); j++) {
        strs[j] = str2.substring(j);
        StringBuilder stringBuilder = new StringBuilder(strs[j]);
        StringBuilder reverse = stringBuilder.reverse();
        strReverseTemp1 = reverse + "";
        strsReverse[j] = strReverseTemp1;
        for (int i = 0; i < strsReverse[j].length(); i++) {// 對反轉元素從第一位遞減後再反轉得到原正向字元串
            StringBuilder sb1 = new StringBuilder(strsReverse[j].substring(i));
            StringBuilder reverse1 = sb1.reverse();
            strReverseTemp2 = reverse1 + "";

            if (str1.contains(strReverseTemp2)) {// 周遊元素存入集合
                list.add(strReverseTemp2);//存入str1主字元串所有包含str2的情況

            }

        }

    }

    for (int i = 0; i < list.size(); i++) {
        int x = list.get(i).toString().length();//擷取str1主字元串所有包含str2的情況的str2的長度
        listLengths.add(x);// 存放長度,下一步周遊字元串長度與最大長度比較
    }

    for (int i = 0; i < list.size(); i++) {
        if ((Object) list.get(i).toString().length() == Collections.max(listLengths)) {// 比較
            System.out.println("最長的字元串為:"+list.get(i));
        }
    }

}
           

}

繼續閱讀