【问题标题】:Streamtokenizer, whitespacesStreamtokenizer,空格
【发布时间】:2013-09-01 09:37:33
【问题描述】:

我想使用 StreamTokenizer 从 java 文件中提取名称。我已将空格设置为逗号

        inputTokenizer.whitespaceChars(',', ',');

但是,当我解析输入文件中的名称(名字与姓氏之间有空格)时,标记器将名字视为一个标记,将姓氏视为另一个标记。我希望它们都被视为同一个令牌,我该怎么做?

例如,“Billy Jean”被视为两个单独的令牌(Billy - token1 Jean - token2),我希望它被视为一个。

谢谢

【问题讨论】:

  • 为什么不能使用splitinputLine.split(",")
  • 所以你的意思是:使用扫描仪阅读整行。然后拆分行,然后解析行以提取我需要的任何数字/字符串?而不是使用streamtokenizer。如何解析该行以确保输入是一个单词?有 String.parseWord 之类的方法吗?
  • 这就是我要说的,但是你说的一个词是什么意思?如果你想将字符串分成一个标记数组,String.split(delimiter) 方法可以做到这一点。
  • streamtokenizer 可以以某种方式确定标记是否为单词,我不知道它是如何做到的。我想知道扫描仪是否有类似的功能。
  • 首先,split"," 上的输入行。然后,获取结果数组的第一个元素并调用array[0].replaceAll("\\w+\\s+\\w+",""),然后确保该方法的返回值的长度为 0。如果是,则解析该行的其余部分。您也可以split 第一个split 的输出,这次使用空间,并对数组的每个元素执行replaceAll("\\w+",""),确保每个元素的结果等于0。

标签: java whitespace tokenize java-io removing-whitespace


【解决方案1】:

您的问题是(显然)默认情况下将空格视为分隔符(不足为奇);您已将逗号设置为空白字符,因此逗号和空格都被视为空白字符。下面的程序做我认为你想要的;注意将空格设置为“wordChars”的行。

import java.io.IOException;
import java.io.StreamTokenizer;
import java.io.StringReader;


public class TokenTeaser
{
  public static void main(String[] args)
  {
    try
    {
      String testString = "one two, three, four five";
      StringReader sr = new StringReader(testString);
      StreamTokenizer st = new StreamTokenizer(sr);
      st.whitespaceChars(',', ',');
      st.wordChars(' ', ' ');
      int currentToken = st.nextToken();
      while (currentToken != StreamTokenizer.TT_EOF)
      {
        System.out.println(st.sval);
        currentToken = st.nextToken();
      }
    }
    catch (IOException e)
    {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

  }

}

【讨论】:

  • 虽然我试图在 cmets 中提供解决方案,但 +1 用于将您的解决方案与 OP 的原始方法集成并保持简单。
  • @arcy 有没有办法告诉标记器将“sam”视为任何给定流中的标记??
  • 我不知道有哪一个,而且对我来说它应该是不合理的。这是一个类,旨在将字符流转换为基于单个字符作为分隔符的标记;当然,您想要的任何标记都可以按照您想要的任何方式处理,但是 this 类似乎不将字符串作为分隔符处理,仅将字符作为分隔符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
  • 1970-01-01
  • 2013-10-13
  • 1970-01-01
  • 2019-01-21
  • 1970-01-01
  • 2017-11-09
相关资源
最近更新 更多