2014-01-11 3 views
0

전체 책을 문자열과 임의의 단일 문자 구분 기호로 묶어 문자열을 분리하고 문자열 배열을 반환하는 메소드를 작성한다고 가정 해 보겠습니다. 나는 다음과 같은 구현 (자바)를 내놓았다 (아무 연속 구분 기호 등을 가정하지 않음)임의의 문자로 분리 된 문자열 분할

ArrayList<String> separater(String book, char delimiter){ 
ArrayList<String> ret = new ArrayList<>(); 
String word =""; 

    for (int i=0; i<book.length(), ++i){ 
     if (book.charAt(i)!= delimiter){ 
      word += book.charAt(i); 
     } else { 
      ret.add(word); 
      word = ""; 
     } 
    } 
    return ret; 
} 

질문 :. 나는 짧은 솔루션 사항 String.split()를 활용할 수있는 방법이 있는지 궁금? 때문에 임의의 문자 구분 기호에 대한 일반적인 정규식을 정의하는 일반적인 방법을 찾을 수 없기 때문에 그. I는 입력 자 분리 방법에서 분할()의 입력 정규식을 생성하는 일반적인 방법을 찾을 콜드 measn

String.split("\\.") if the delimiter is '.' 
String.split("\\s+"); if the delimiter is ' ' // space character 

. 어떤 제안?

+0

??? 그래서 어떤 언어로 답을 참조하고 싶습니까? – alvas

+0

book.split (""+ 구분 기호)를 호출하는 것이 잘못된 이유는 무엇입니까? 어쩌면 나는 완전히 질문을 이해하지 못하고있다. – Alejandro

+0

@alvas 자바 선호한다. –

답변

2
String[] array = string.split(Pattern.quote(String.valueOf(delimiter))); 

그렇습니다. 구아바 분배기는 String.split()보다 훨씬 다양하고 잘 작동합니다.

귀하의 방법에 대한 메모 : 루프에서 문자열에 연결하는 것은 매우 비효율적입니다. 문자열은 변경 불가능하므로 많은 임시 String 및 StringBuilders를 생성합니다. 대신 StringBuilder를 사용해야합니다.

+0

StringBuilder 대신 String을 사용하는 데 전적으로 동의합니다. 간단히하기 위해 문자열을 사용합니다. 재미있는 일은 Amazone의 인터뷰 담당자가 자바 컴파일러가 그것을 처리 할 것이라고 믿었습니다 !! –

+0

컴파일러는 'String s = "hello"+ title + ""+ firstName + ""+ lastName;과 같은 코드를 처리합니다. 그러나 루프에 추가가 필요하지 않습니다. –

+0

방금 ​​구아바 쪼개는 도구를 사용하여 귀하의 조언에 대한 요점을 (귀하의 솔루션을 백 슬래시 '\\'또는 string.split (Patternsquit ("\\")) 및 java.util.regex.Pattern.error (알 수없는 소스) 오류가 발생했습니다 –