【问题标题】:identifying a new line in a scanner [duplicate]在扫描仪中识别新行[重复]
【发布时间】:2012-12-05 06:42:59
【问题描述】:

可能重复:
Java: Scanner stopping at new line

我是编程新手,我想知道是否有办法识别Scanner 中何时有新行。我的方法应该取一个文本文件的Scanner 并在它超过 60 个字符的情况下换行,而不会在单词中间中断它。

我遇到的问题是,由于我使用每个标记,我的代码没有考虑少于 60 个字符的行,而是将它们附加到前一行,最多 60 个字符。

这是我创建的方法:

public static void wordWrap3(Scanner s) {
    String k = "";
    int length = 0;
    while(s.hasNext()) {
        k = s.next();
        length = length + k.length() + 1;
        if (length>60) {
            System.out.print("\n");
            length = 0;
        }
        System.out.print(" " + k);
    }
}

这是我正在使用的文本:

We're no strangers to love, You know the rules and so do I, 
A full commitment's what Im thinking of, You wouldn't get this from any other guy.
I just wanna tell you how I'm feeling, Gotta make you understand.
Never gonna give you up, Never gonna let you down, Never gonna run around and desert you.
Never gonna make you cry, Never gonna say goodbye, Never gonna tell a lie and hurt you.

【问题讨论】:

  • 我不清楚 - 你是想把 existing 行也放在一起,还是只是 insert 换行符?如果是后者,只需使用nextLine() 一次读取一行...
  • 所以你想在 60 个字符后添加一个换行符?
  • 嗯……你是不是想搞 rickroll SO? :-)
  • 我正在尝试插入现有的换行符。我一次读一行时遇到的问题是它仍然在单词中间中断。这就是为什么我是通过令牌阅读的原因

标签: java java.util.scanner


【解决方案1】:

您似乎在说您想分别对每一行进行自动换行。如果是这样,简单的解决方案是将输入分成几行,然后为每一行创建一个扫描器并将其传递给您现有的 wordWrap3 方法。

【讨论】:

  • 您是说我应该创建另一个扫描仪,然后从前一个扫描仪一次一行地传递该扫描仪吗?我使用的是一个叫做实践的网站,所以我能控制的只是方法,而不是实际的程序。
  • 是的。我是这么说的。如果您受到限制,以至于您的代码必须进入该方法,那么您将需要以不同的方式组织它,但基本逻辑应该是相同的。
【解决方案2】:

你可以试试:

 String fileLine = "";
 while(s.hasNextLine()) {
     fileLine = s.nextLine();
     if(fileLine.length() > 60 )
     {
         while (fileLine.length() > 60)
         {
             String tempStr = fileLine.substring(0, 60);
             int rightIdx = tempStr.lastIndexOf(' ');
             String firstStr = tempStr.substring(0, rightIdx);
             String secStr = fileLine.substring(rightIdx + 1, fileLine.length());
             System.out.println(firstStr);
             //if still it is big
             if(secStr.length() > 60)
                 fileLine = secStr;
             else
             {
                 System.out.println(secStr);
                 break;
             }
         }
     }
     else
     {
         System.out.println(fileLine);
     }
 }

当然可以进一步改进。

【讨论】:

  • 我将如何为 120 个字符的行实现此功能?我可以把 if 语句放在一个循环中吗?
  • 为此更新了代码,还可以进一步改进,我只是提供了一些帮助,没有完全工作,高效的代码
猜你喜欢
  • 1970-01-01
  • 2010-11-23
  • 1970-01-01
  • 2015-09-06
  • 2015-10-02
  • 1970-01-01
  • 2020-12-03
  • 1970-01-01
  • 2010-10-06
相关资源
最近更新 更多