在While循环Java

时间:2016-11-15 16:51:33

标签: java while-loop filereader filewriter

我制作了一个扫描程序,它读取假语言并返回一串数字来表示关键字,带有数字,数字和符号的字母/字母到解析器要读取的文本文件中。

我遇到的问题是,当最初读取的文本文件中有一个具有多个数字的数字时,它会返回如下:

1 =信件

12 =相等

2 =数字

777是第一个文本中的数字。

实施例。在初始文本中:b = 777

最终文本:1 12 2 7 2 7 2 7

当我真的想要1 12 2 777

我知道我应该将角色777变成一个字符串,但是我的困惑来自于当我在循环中发布时如何让它首先出现

我还有另一个单词循环,这也是同样的问题。

谢谢

import java.util.Scanner;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

while(text.charAt(i)>='0'&&text.charAt(i)<='9')
            {
                log(Integer.toString(CONST));
                System.out.println(CONST);
                char num =text.charAt(i);
                System.out.println(num);
                log(Character.toString(num));
                i++;
            }

1 个答案:

答案 0 :(得分:1)

当代码不起作用时,你应该做的第一件事就是将它塑造成可测试的东西,并编写一个失败的测试。

我通过以下方式调整了您的代码:

  • 删除您未解释或看似无关紧要的部分(CONSTlog()
  • 写入任意Writer,而不是硬编码System.out

所以:

 private void consumeDigits(Writer writer, String text) throws IOException {
      int i=0;
      while (text.charAt(i) >= '0' && text.charAt(i) <= '9') {
          char num = text.charAt(i);
          writer.append(num);
          i++;
      }
  }

现在我可以写一个测试。

@Test
public void printStackTrace() throws IOException {
    String text = "777abcdef";
    StringWriter writer = new StringWriter();
    consumeDigits(writer, text);
    assertEquals(writer.toString(), "777");
}

测试通过 - 所以要么你的代码有效,要么我误解了你的要求。但是如果你遵循这种工作方法并编写一个失败的测试,那么SO上的回答可以更容易帮助。