一次输入多行输入
问题描述:
所以我的问题是,我挂在第二个声明。我应该允许用户放置多行输入(全部同时输入),while循环在所有输入使用后自行结束,输入如下一次输入多行输入
速度限制为40英里,但是你要超过65
99瓶......
的代码只使用第一个输入然后关闭,当我使用scan.hasNextLine它停留在一个无限循环
public static void main(String[] args) throws IOException {
Scanner scan = new Scanner(System.in);
Scanner scan2 = new Scanner(System.in);
List<Integer> numbers = new ArrayList<>();
Pattern p = Pattern.compile("([-+]?[0-9]+(?:\\.[0-9]+)?)");
String phrase;
String[] tens = { "Ten", "Twenty", "Thirty", "Fourty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" };
String[] teens = { "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen",
"Nineteen" };
String[] ones = { "", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine" };
phrase = scan.nextLine();
Matcher m = p.matcher(phrase);
while (m.find()) {
numbers.add(Integer.parseInt(m.group()));
}
// Solve
while (There is another line of input) {// i need some help here!!!
for (int i = 0; i < numbers.size(); i++) {
if (numbers.get(i) >= 20) {
if (numbers.get(i) % 10 == 0) {
phrase = phrase.replaceAll(Integer.toString(numbers.get(i)),
tens[((numbers.get(i) - numbers.get(i) % 10)/10) - 1]);
} else {
phrase = phrase.replaceAll(Integer.toString(numbers.get(i)),
(tens[((numbers.get(i) - numbers.get(i) % 10)/10) - 1] + "-"
+ ones[numbers.get(i) % 10]));
}
} else if (numbers.get(i) < 20 && numbers.get(i) > 10) {
phrase = phrase.replaceAll(Integer.toString(numbers.get(i)), teens[(numbers.get(i) % 10) - 1]);
} else if (numbers.get(i) < 10 && numbers.get(i) > 0) {
phrase = phrase.replaceAll(Integer.toString(numbers.get(i)), ones[numbers.get(i)]);
} else if (numbers.get(i) == 10) {
phrase = phrase.replaceAll(Integer.toString(numbers.get(i)), "Ten");
} else if (numbers.get(i) == 0) {
phrase = phrase.replaceAll(Integer.toString(numbers.get(i)), "Zero");
}
}
}
System.out.println(phrase);
}
答
这样做。
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
Pattern p = Pattern.compile("([-+]?[0-9]+(?:\\.[0-9]+)?)");
String[] tens = {"Ten", "Twenty", "Thirty", "Fourty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
String[] teens = {"Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen",
"Nineteen"};
String[] ones = {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
String phrase = null;
while (scanner.hasNextLine()) {
phrase = scanner.nextLine();
// if input is an empty line, exit from loop
if (phrase.isEmpty()) {
break;
}
List<Integer> numbers = new ArrayList<>();
Matcher m = p.matcher(phrase);
while (m.find()) {
numbers.add(Integer.parseInt(m.group()));
}
for (int i = 0; i < numbers.size(); i++) {
if (numbers.get(i) >= 20) {
if (numbers.get(i) % 10 == 0) {
phrase = phrase.replaceAll(Integer.toString(numbers.get(i)),
tens[((numbers.get(i) - numbers.get(i) % 10)/10) - 1]);
} else {
phrase = phrase.replaceAll(Integer.toString(numbers.get(i)),
(tens[((numbers.get(i) - numbers.get(i) % 10)/10) - 1] + "-"
+ ones[numbers.get(i) % 10]));
}
} else if (numbers.get(i) < 20 && numbers.get(i) > 10) {
phrase = phrase.replaceAll(Integer.toString(numbers.get(i)), teens[(numbers.get(i) % 10) - 1]);
} else if (numbers.get(i) < 10 && numbers.get(i) > 0) {
phrase = phrase.replaceAll(Integer.toString(numbers.get(i)), ones[numbers.get(i)]);
} else if (numbers.get(i) == 10) {
phrase = phrase.replaceAll(Integer.toString(numbers.get(i)), "Ten");
} else if (numbers.get(i) == 0) {
phrase = phrase.replaceAll(Integer.toString(numbers.get(i)), "Zero");
}
}
System.out.println(phrase);
}
}
输出
The speed limit is 40 mph, but you were going over 65
The speed limit is Fourty mph, but you were going over Sixty-Five
99 bottles of ...
Ninety-Nine bottles of ...
你说“我应该允许用户把有输入(在同一时间全部定)的多行”。所以,多行文本被粘贴到控制台上,然后按下Enter键,对吧?你有没有尝试在'hasNextLine()'之后再做一个'scan.nextLine()'? –
忽略我以前的ramblings,这是考虑:http://stackoverflow.com/a/23713487/5629413 –
如果我的答案帮助你,你可以接受它作为答案。 –