2014-09-01 3 views
1

이 작은 프로젝트에 갇혀 있습니다. 문자열을 여러 문자열로 분할하는 방법을 알아낼 수 없습니다.문자열을 여러 문자열로 변환

예 :

String exampleString = "one two three four five"; 
String[] exmplString = {"one", "two", "three", "four", "five"}; 

내가 무엇을 가지고 : 나는 응용 프로그램을 실행할 때

static File interfacepath; 
FileReader fr; 
BufferedReader br; 
static String currentLine; 
static String[] parseableLine; 
Integer lineNumber; 

public void readFile(Integer interfaceID) throws IOException { 

    interfacepath = new File("data/csgui/interface_" + interfaceID 
      + ".csgui"); 

    fr = new FileReader(interfacepath.getAbsolutePath()); 

    br = new BufferedReader(fr); 

    br.read(); 

    getLine(1); 
} 

public static void getLine(Integer lineNumber) throws IOException { 

    try (LineNumberReader lnr = new LineNumberReader(new FileReader(
      interfacepath))) { 

     for (String line = null; (line = lnr.readLine()) != null;) { 

      if (lnr.getLineNumber() == lineNumber) { 

       currentLine = line; 
       parseableLine = currentLine.split("\\s+"); 

       System.out.println(parseableLine); 

     } 
      System.out.println(currentLine); 

    } 

} 
} 

가 반환 달성

[Ljava.lang.String;@5bcf4b61 
testTable Table 1280 720 350 350 1 

& 나는 데 어떤 문제 :

{testTable, Table, 1280, 720, 350, 350, 1} 
testTable Table 1280 720 350 350 1 

답변

1

, 당신은

public static void main(String[] args) { 
    String str = "testTable Table 1280 720 350 350 1"; 
    String[] strArr = str.split("\\s+"); 
    System.out.println(Arrays.toString(strArr)); 
} 

출력처럼 String.split(String) 뭔가를 사용할 수있는 것은

[testTable, Table, 1280, 720, 350, 350, 1] 

regular expression"\\s+" 일치하기 때문에 하나 개 이상의 공백 문자입니다.

편집 업데이트 된 코드를 기반으로

,

System.out.println(parseableLine); 

당신은 [Ljava.lang.String;@5bcf4b6를 얻을 수 (및 Arrays.toString(Object[]) 필요) 자바 배열 오버라이드 (override)하지 않기 때문에

System.out.println(Arrays.toString(parseableLine)); 

이어야한다 toString()

+0

정확히 작동하지 않습니다. 주 스레드를 업데이트했습니다. – Ryan

1

.split(..) 정확히 분할하려는 각 문자열 사이에 적어도 하나의 공백이 있다고 가정 할 때 항상 찾고있는 것입니다. 나는 당신의 질문을 이해하면

public static String[] splitBySpace(String s){ 
    return s.split("\\s+"); 
} 
+3

대신'return s.split ("\\ s");'를 사용하십시오. – AntonH

0

당신은 공간하여

return new String[] { sb.toString()}; 

return sb.toString().split("\\s");. 

하는 sb.toString() 반환 testTable Table 1280 720 350 350 1 것이다 split을 변경하고 배열로 반환해야합니다.

1

잘 모두가 내가 있고 StringTokenizer의 생성자는 구분 기호와 함께 토큰 화 될 문자열을 받아

String exampleString = "testTable Table 1280 720 350 350 1"; 
StringTokenizer stringTokenizer = new StringTokenizer(exampleString," "); 
List<String> list = new ArrayList<String>(); 
while (stringTokenizer.hasMoreTokens()){ 
    list.add(stringTokenizer.nextToken()); 
} 
String str[] = list.toArray(new String[list.size()]); 
System.out.println(java.util.Arrays.toString(str)); 

java.util.StringTokenizer을 사용했다 java.lang.String#split()을 사용했다.

+0

[javadoc] (http://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html) : *'StringTokenizer'는 호환 이유 때문에 유지되는 레거시 클래스입니다. 새 코드에서는 사용하지 않는 것이 좋습니다.이 기능을 사용하고자하는 사람은'String' 또는'java.util.regex' 패키지의'split' 메소드를 대신 사용하는 것이 좋습니다. * –

+0

예. 당신과 다른 방식으로 시도한 것에 동의합니다. – SparkOn

관련 문제