2012-11-23 40 views
1

我想实现一个读取文件(即.txt)并将文件保存在数组中的程序(我已经完成了这个)。然后我想要一个二维数组,我只保存每行的单词。在一个数组中分割一个.txt文件

例如,如果文件中包含的每一行我想在array[0][0]第一行的第一个字和array[0][1]两行用两个字有第一线的第二个字,等等

我有下面的代码:

for (int i=0; i < aryLines.length; i++) { 
    String[] channels = aryLines[i].split(" "); 

    System.out.println("line " + (i+1) + ": "); 

    for (int j=0; j < channels.length; j++){ 
     System.out.println("word " + (j+1) + ": "); 
     System.out.println(channels[j]); 
    } 

    System.out.println(); 
} 

其中aryLines contatins所有的行,但我没有找到执行什么我描述了一个解决方案。

+0

你想对标点符号做什么?如果一句话完全停止,那么这个词就可以完全停止吗?完全停止一个新词吗?也许你没有任何点缀? –

回答

1

让你1-D数组是: -

String[] lines = new String[10]; 

你首先需要声明数组的数组: -

String[][] words = new String[lines.length][]; 

然后遍历它,和每行,把它分解并分配它内部阵列: -

for (int i = 0; i < words.length; i++) { 
    words[i] = lines[i].split("\\s+"); 
} 

现在,问题将是,不是所有的单词都被space分开。他们还有许多标点符号,您需要考虑。我会把它留给你来分解所有的标点符号。

对于例如为: -

"This line: - has word separated by, : and -" 

现在,你需要找到在你的句子中使用的所有标点符号。


一件事,你可以做是使用Regex只匹配单词的模式,如果你不知道什么所有punctuation在你的线使用。并将每个匹配的单词添加到数组列表。

"\\w+" // this regex will match one or more characters forming words 

让我们来看看它在上面的例子中工作: -

String str = "This line: - has word separated by, : and -"; 
    List<String> words = new ArrayList<String>(); 

    Matcher matcher = Pattern.compile("\\w+").matcher(str); 

    while (matcher.find()) { 
     words.add(matcher.group()); 
    } 

    System.out.println(words); 

OUTPUT: -

[This, line, has, word, separated, by, and] 

您可以在上面的循环,我贴使用这种方法。

+0

感谢您的快速回复。每个单词都用相同的字符分隔,所以它不是问题。它工作正常!我想问一下这是什么意思:“split(”\\ s +“)” –

+0

'\\ s'表示空间。 '+'之后是一个量词,意思是'一个或多个'。所以,'\\ s +'意味着分割一个或多个空间。这将处理由多个空间分隔的两个单词。 –

+0

再次感谢您!所以如果有特殊字符而不是字母,“\\ w +”会检查字符串中的字符吗? –