我制作了一个扫描程序,它读取假语言并返回一串数字来表示关键字,带有数字,数字和符号的字母/字母到解析器要读取的文本文件中。
我遇到的问题是,当最初读取的文本文件中有一个具有多个数字的数字时,它会返回如下:
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++;
}
答案 0 :(得分:1)
当代码不起作用时,你应该做的第一件事就是将它塑造成可测试的东西,并编写一个失败的测试。
我通过以下方式调整了您的代码:
CONST
和log()
)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上的回答可以更容易帮助。