2012-03-05 3 views
1

문자열의 처음 10 단어를 검색하는 코드를 작성하려고합니다.Java : 문자열에서 처음 10 단어를 찾습니다. 가장 효율적인 알고리즘은 무엇입니까?

내가 상상할 수있는 가장 좋은 알고리즘은 문자열을 공간으로 분할하고 처음 10 개의 요소를 가져 오는 것입니다. 그러나이 문자열은 매우 길기 때문에 효율적이지 않습니다.

자바를 구현할 수있는 더 좋은 알고리즘이 있습니까?

감사합니다.

+0

예, 바로 최초의 10 대에 분할을하고, 문자열의 나머지 부분을 무시합니다. –

+0

정규 표현식이 효율적이지 않습니다 (사용하기가 쉽고 일반적으로 더 중요합니다). 긴 문자열을 사용하는 경우 적어도 10 번째 단어의 끝을 찾기 위해 문자열의 시작 부분을 읽어야합니다. –

답변

12

String.split(String regex,int limit)에 특정 제한을 사용할 수 있습니다. 정규식 규칙을 11 번 이상 호출하지 마십시오. [이 문자열의 나머지 부분을 분할하지 않도록 10 개 첫째 요소는 별도의 단어가 함께

그것은하는 String[] 오브젝트를 작성하고 마지막 요소는 규칙이 아직에 확인되지 않은 단어를 포함

4

당신 String.split()을 사용하여 한도를 지정할 수 있습니다. API 가입일

:

한계 파라미터는 패턴이 적용되는 횟수를 제어하기 때문에, 결과 어레이의 길이에 영향을 미친다. 한계 n이 0보다 큰 경우 패턴은 최대 n - 1 회 적용되고 배열의 길이는 n보다 크지 않으며 배열의 마지막 항목에는 마지막으로 일치하는 구분 기호 이후의 모든 입력이 포함됩니다. n이 양수가 아닌 경우 패턴은 가능한 한 여러 번 적용되고 배열의 길이는 임의 일 수 있습니다. n가 제로의 경우, 패턴은 가능한 한 많이 적용되어 배열은 임의의 길이를 가질 수가있어 공백의 캐릭터 라인은 파기됩니다.

6

시도 StringTokenizer :

StringTokenizer st = new StringTokenizer("i am a very very long String"); 
    for(int i = 0; i < 10 && st.hasMoreTokens(); i++) { 
     System.out.println(st.nextToken()); 
    } 
3

왼쪽에서 오른쪽으로 그냥 스캔 :

static String[] first10Words(String s) { 
    List<String> l = new ArrayList<String>(); 
    int pos = 0; 
    while (l.size() < 10) { 
     int newPos = s.indexOf(' ', pos); 
     if (newPos == -1) { 
      l.add(s.substring(pos)); 
      break; 
     } 
     l.add(s.substring(pos, newPos)); 
     pos = newPos + 1; 
    } 
    return l.toArray(new String[0]); 
} 
+1

10 개의 부분 문자열이있는 경우 원래의 큰 문자열 만 gc'ed 될 것이므로 이로 인해 메모리 누수가 발생할 수 있습니다. – Rekin

+0

이것이 메모리 누수의 원인을 알 수는 없지만, 자세히 설명해 주시겠습니까? –

+1

이 솔루션은 다른 솔루션보다 훨씬 복잡합니다. – Jivings

3

을 정규식?

public String getFirst10Words(String arg) { 
    Pattern pattern = Pattern.compile("([\\S]+\\s*){1,10}"); 
    Matcher matcher = pattern.matcher(arg); 
    matcher.find(); 
    return matcher.group(); 
} 
-1

나는 자바에 새로운 해요하지만 난 더 기본적인이 한 짓을했는지 :

public void getSummary() { 
    int count=0; 
    int position=0; 
    for (count = 0 ; count < 10 ; count++) 
    { 
     position = yourString.indexOf(" ", position+1); 
    } 
    System.out.println(yourString.substring(0,position)+"..."); 
} 
관련 문제