【问题标题】:StringBuilder and String IssuesStringBuilder 和字符串问题
【发布时间】:2014-04-18 18:36:06
【问题描述】:

给定输入...

Nathan  E   Long
Jay L   Stevens
Edna    J   Jackson
Emma    Watson
Alexa   J   Ness
Charles A   Miller

我正在尝试编写一次读取一行的代码,将名称分成 3 个标记,然后重新排列这些标记以读取...

Long, Nathan E
Stevens, Jay L
Jackson, Edna J
Ness, Alexa J
Miller, Charles A

另外,如果我得到的代币少于 3 个,我会完全放弃这个名字,比如 Emma Watson。代码...

public class Hmwk {

    public static void main(String[] args)throws FileNotFoundException {
        Scanner names = new Scanner(new File("input.txt"));
        int counter = 0;
        while (names.hasNextLine())
        {
            String nameIn = names.next(); 
            String delims = ("\t");
            String[] tokens = nameIn.split(delims);
            if (tokens.length != 3)
            {
                continue; //returns to while loop and gets next line
            }
            String first = tokens[0];
            String middle = tokens[1];
            String last = tokens[2];
            StringBuilder finalName = builder(first,middle,last);
            System.out.println(finalName);

        }

    }
    public static StringBuilder builder(String f, String m, String l)
    {
        StringBuilder theBuilder = new StringBuilder();
        theBuilder.append(l);
        theBuilder.append(',');
        theBuilder.append(' ');
        theBuilder.append(f);
        theBuilder.append(' ');
        theBuilder.append(m);
        return theBuilder;
    }
}

文件中的所有名称都由制表符分隔。我的代码运行,但它没有打印出来......任何让我完全困惑的东西。我哪里错了?

【问题讨论】:

  • names.next(); 应该是names.nextLine();
  • 请不要扔 Emma Watson :-)
  • 您可能应该提到制表符分隔符。目前我们必须阅读您当前的代码才能确定它是制表符分隔的
  • 我经常看到这样的代码,它使用 Scanner 却从未关闭它。扫描仪不应该关闭吗?

标签: java string while-loop append stringbuilder


【解决方案1】:

首先,Scanner#next() 只返回下一个令牌。在默认配置下,标记由空格字符分隔。所以第一次调用

String nameIn = names.next(); 

会返回

Nathan  

分割时只返回一个长度为 1 的数组。

使用Scanner#nextLine() 检索所有输入,直到找到换行符为止。

其次,您的标记似乎没有用制表符分隔,\t。使用

String delims = ("\\s+");

one or more whitespace characters分割。

【讨论】:

  • @Cruncher 是的,贪婪。
猜你喜欢
  • 1970-01-01
  • 2015-04-29
  • 1970-01-01
  • 2010-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多