[java] String.split에 파이프 구분 기호가 필요한 이유는 무엇입니까?

파이프로 구분 된 값으로 각 줄이있는 파일을 구문 분석하려고합니다. 분할 방법으로 파이프 구분 기호를 이스케이프하지 않으면 올바르게 작동하지 않지만 다음과 같이 파이프를 이스케이프 한 후에는 올바르게 작동했습니다.

private ArrayList<String> parseLine(String line) {
    ArrayList<String> list = new ArrayList<String>();
    String[] list_str = line.split("\\|"); // note the escape "\\" here
    System.out.println(list_str.length);
    System.out.println(line);
    for(String s:list_str) {
        list.add(s);
        System.out.print(s+ "|");
    }
    return list;
}

누군가 파이프 split()방법을 이스케이프 처리해야하는 이유를 설명해 주 시겠습니까?



답변

String.split정규 표현식 인수가 필요합니다. 이스케이프 처리되지 않은 |것은 “빈 문자열 또는 빈 문자열”을 의미하는 정규식으로 구문 분석됩니다. 이는 의미하지 않습니다.


답변

분할 할 해당 매개 변수의 구문 이 정규식이므로 ‘|’ OR의 특별한 의미와 ‘\ |’ 리터럴 ‘|’을 의미 문자열 “\\ |” 정규식을 의미합니다. ‘\ |’ 이는 문자 ‘|’와 정확히 일치 함을 의미합니다.


답변

당신은 단순히 이것을 할 수 있습니다 :

String[] arrayString = yourString.split("\\|");


답변