字符串切割分類截取

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class aaa {
private static final String QU = "區(qū)";
private static final String LU = "路";
private static final String NONG = "弄";
private static final String HAO = "號";
private static final String LOU = "樓";
private static final String SHI = "室";
private static final String CUN = "村";
private static final String XIAOQU = "小區(qū)";
private static final String OTHER = "其他";

public static void main(String[] args) {
    String str = "a區(qū)b路m村x小區(qū)c弄d號e樓h室";
    System.out.println(str);

    int qu = str.indexOf(QU);
    int lu = str.indexOf(LU);
    int nong = str.indexOf(NONG);
    int hao = str.indexOf(HAO);
    int lou = str.indexOf(LOU);
    int shi = str.indexOf(SHI);
    int cun = str.indexOf(CUN);
    int xiaoqu = str.indexOf(XIAOQU);
    if (xiaoqu + 1 == qu) {
        qu = 0;
    }
    List<Integer> list = new ArrayList<Integer>();
    list.add(qu);
    list.add(lu);
    list.add(nong);
    list.add(cun);
    list.add(xiaoqu);
    list.add(hao);
    list.add(lou);
    list.add(shi);
    Collections.sort(list);
    Map<String, String> map = new HashMap<String, String>();
    int i1 = 0;
    int i = 0;
    String preField = "";
    for (i = 0; i < list.size(); i++) {
        if (i == 0) {
            i1 = 0;
        } else {
            i1 = i - 1;
        }
        preField = judgeValue(list.get(i1), list.get(i), qu, QU, str, map,
                preField);
        preField = judgeValue(list.get(i1), list.get(i), lu, LU, str, map,
                preField);
        preField = judgeValue(list.get(i1), list.get(i), nong, NONG, str,
                map, preField);
        preField = judgeValue(list.get(i1), list.get(i), cun, CUN, str,
                map, preField);
        preField = judgeValue(list.get(i1), list.get(i), xiaoqu, XIAOQU,
                str, map, preField);
        preField = judgeValue(list.get(i1), list.get(i), hao, HAO, str,
                map, preField);
        preField = judgeValue(list.get(i1), list.get(i), lou, LOU, str,
                map, preField);
        preField = judgeValue(list.get(i1), list.get(i), shi, SHI, str,
                map, preField);
    }
    if (list.get(i - 1) == xiaoqu) {
        map.put(OTHER, str.substring(list.get(i - 1) + 2));
    } else {
        map.put(OTHER, str.substring(list.get(i - 1) + 1));
    }
    System.out.println(map.get(QU));
    System.out.println(map.get(LU));
    System.out.println(map.get(NONG));
    System.out.println(map.get(CUN));
    System.out.println(map.get(XIAOQU));
    System.out.println(map.get(HAO));
    System.out.println(map.get(LOU));
    System.out.println(map.get(SHI));
    System.out.println(map.get(OTHER));
}

// i1為list中上一個值,i為當(dāng)前值,j為實際值,field為分隔名,preField為上一個名
private static String judgeValue(int i1, int i, int j, String field,
        String str, Map<String, String> map, String preField) {
    if (i1 <= 0 || i1 == i) {
        i1 = 0;
    } else {
        i1 = i1 + preField.length();
    }
    if (i > 0) {
        if (i == j) {
            map.put(field, str.substring(i1, i + field.length()));
            return field;
        }
    }
    return preField;
}

}
算法并不完善,時間、空間復(fù)雜度高了,完全可以進一步,但是沒時間去整理,就這樣,也可以湊合用用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容