2014-09-01 117 views
1

卡住了這個小小的項目。無法弄清楚如何在String []中將String分割爲多個字符串。將字符串轉換爲多個字符串

例子:

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

如果我理解你的問題,你可以使用String.split(String)和類似

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)); 
} 

輸出是

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

因爲regular expression"\\s+"匹配一個或多個空格字符。

編輯

基於更新的代碼,

System.out.println(parseableLine); 

應該

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

你得到[Ljava.lang.String;@5bcf4b6(並且需要Arrays.toString(Object[])),因爲Java數組不會覆蓋toString()

+0

不完全正常工作,我更新了主線程。 – Ryan 2014-09-01 04:41:39

1

.split(..)正是你要找的,假設每個你想要分割的字符串之間至少有一個空格。

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

使用'return s.split(「\\ s」);'代替。 – AntonH 2014-09-01 03:54:56

0

您需要通過空間來改變你的

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

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

sb.toString()回報testTable Table 1280 720 350 350 1split並返回一個數組。

1

那麼大家使用java.lang.String#split()所以我用java.util.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)); 

StringTokenizer類的構造函數接受與分隔符一起被標記化的字符串。

+0

從[javadoc](http://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html):*'StringTokenizer'是一個遺留類,由於兼容性原因而保留,儘管它新代碼中不鼓勵使用。建議任何尋求這種功能的人都使用'String'或'java.util.regex'包的'split'方法代替。* – 2014-09-01 04:46:00

+0

是的,我同意你剛剛以不同的方式嘗試過 – SparkOn 2014-09-01 04:47:07