【问题标题】:Tokenizer skipping blank values before the split - Java标记器在拆分之前跳过空白值 - Java
【发布时间】:2014-12-18 20:31:16
【问题描述】:

我使用 Tokenizer 来分割一个文本文件,它是这样分开的:

名字、中间名、姓氏

哈利,抢劫,公园

汤姆,做

while (File.hasNext()) 
    {
        StringTokenizer strTokenizer = new StringTokenizer(File.nextLine(), ",");

        while (strTokenizer.hasMoreTokens())
        {

我已经用这个方法拆分了。

问题是当有缺失数据时(例如汤姆没有中间名)它会忽略分割(,)并将下一个值注册为中间名。

如何让它注册为空白?

【问题讨论】:

  • 双逗号:FIRST NAME, , LAST NAME
  • 请发布完整代码

标签: java token tokenize


【解决方案1】:

根据Davio 的回答,您可以管理空白并将其替换为您自己的字符串:

String[] result = File.nextLine().split(",");
for (int x = 0; x < result.length; x++){
    if (result[x].isEmpty()) {
    System.out.println("Undefined");
    } else
    System.out.println(result[x]);
}

【讨论】:

    【解决方案2】:

    请改用String.split

    "tom,,do".split(",") 将产生一个包含 3 个元素的数组:tom, (blank) and do

    【讨论】:

      【解决方案3】:

      在我看来,您有 2 个解决方案:

      • 您可以按照ToYonos 的建议将文件中的逗号加倍,或者。
      • 如果只有 2 个标记表示此人没有中间名,则可以在使用 countTokens() 方法将值分配给变量之前计算标记。

      【讨论】:

        【解决方案4】:

        来自StringTokenizer的JavaDoc

        StringTokenizer 是为了兼容性而保留的遗留类 原因尽管在新代码中不鼓励使用它。推荐 任何寻求此功能的人使用 String 的 split 方法 或 java.util.regex 包代替

        所以,你不需要使用 StringTokenizer。

        String.split 示例

        String name = "name, ,last name";
        String[] nameParts = name.split(",");
        for (String part : nameParts) {
            System.out.println("> " + part);
        }
        

        这会产生以下输出

        > name
        >  
        > last name
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多