阅读文本文件java

时间:2015-11-05 22:10:37

标签: java regex

我正在尝试在java中读取文本文件(.txt)。我需要最终将文本逐字逐句地提取到二叉树的节点中。例如,如果我有文字:“嗨,我正在做测试!”,我想把它分成“嗨”“我”“m”“做”“一个”“测试”,基本上都是跳过所有标点符号和空格,并将一个单词视为一系列连续的字母。我到目前为止能够提取单词并将它们放入数组中进行测试。但是,如果我的.txt文件中有一个完全空行,代码会将其视为一个单词并返回一个空格。此外,行尾的标点符号有效,但如果有一个逗号例如然后是文本,我也会得到一个空白空间!这是我到目前为止所尝试的:

    public static void main(String[] args) throws Exception
{

 FileReader file = new FileReader("File.txt");  
 BufferedReader reader = new BufferedReader(file);


String text = "";
String line = reader.readLine();

    while (line != null)
{
    text += line;
    line = reader.readLine();
}
System.out.println(text);

String textnospaces=text.replaceAll("\\s+", " ");

System.out.println(textnospaces);

String [] tokens = textnospaces.split("[\\W+]");

for(int i=0;i<=tokens.length-1;i++)
{
    tokens[i]=tokens[i].toLowerCase();
    System.out.println(tokens[i]);
}

}

使用以下文字:

我不能,来看你。今天我的朋友很难

取值

我得到以下输出:

可以

吨 (“t”和“come”之间的额外空间)

您 (再次增加空间)

今天

朋友

顽固派

任何帮助将不胜感激!谢谢

2 个答案:

答案 0 :(得分:0)

使用String的trim()方法。来自文档http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#trim%28%29

“返回字符串的副本,省略前导和尾随空格。

如果此String对象表示空字符序列,或者此String对象表示的字符序列的第一个和最后一个字符的代码都大于'\ u0020'(空格字符),则对此String对象的引用为返回。

否则,如果字符串中没有代码大于'\ u0020'的字符,则会创建并返回表示空字符串的新String对象。

否则,令k为代码大于'\ u0020'的字符串中第一个字符的索引,并且令m为代码大于'\ u0020'的字符串中最后一个字符的索引。创建一个新的String对象,表示该字符串的子字符串,该字符串以索引k处的字符开头,以索引m处的字符结尾,即this.substring(k,m + 1)的结果。

此方法可用于从字符串的开头和结尾修剪空格(如上所述)。

返回:     删除了前导和尾随空格的此字符串的副本,如果没有前导或尾随空格,则为此字符串。“

答案 1 :(得分:0)

如果你真的只是寻找每个连续的字符序列,你可以通过非常简单的正则表达式匹配来实现这一点。

    String patternString1 = "([a-zA-Z]+)";
    String text = "I can't, come see you. Today my friend is hard";
    Pattern pattern = Pattern.compile(patternString1);
    Matcher matcher = pattern.matcher(text);

    while(matcher.find()) {
        System.out.println("found: " + matcher.group(1));
    }