我无法弄清楚如何处理以下问题。
我有一个用户输入,他们可以输入由空格分隔的各种数字,例如(20 30 89 ..) 我需要计算输入了多少个数字(在这种情况下输入了3个数字) 我该怎么做?
我假设这背后的逻辑类似于计算空格数并向其添加1(在它前面没有空格的初始数字),但我不知道如何通过代码执行此操作。 检查在第一个数字之前是否输入了空格也是很好的,如果不是在最终计数中添加+ 1,还要检查诸如双空格,三重空格等之类的内容并将它们计为一个空格。最后看看最后是否没有空格(因此它不会加起来)。
这是我到目前为止所获得的内容(用户输入):
package temperature;
import java.util.*;
/**
* @author --
*/
public class Histogram {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// Input for grades
Scanner input = new Scanner(System.in);
System.out.println("Enter temperatures below (separated by spaces e.g. 20 30 89 ..)");
int temperature = input.nextInt();
}
}
答案 0 :(得分:3)
Scanner#nextLine()
方法阅读整行。spaces
上拆分读取行 - 使用+
量词
该array
获得的长度。以下是一个例子: -
if (scanner.hasNextLine()) {
int totalNumbers = scanner.nextLine().split("[ ]+").length;
}
答案 1 :(得分:1)
如果你只计算空格,你最终可能会将任何垃圾数据作为数字。我建议的是阅读所有输入,直到你到达空格字符。然后尝试将其转换为Integer(或Double),如果转换失败,请对无效输入执行错误处理,否则增加计数器。
一个例子是这样的:
// Sample input used.
String input = "23 54 343 75.6 something 22.34 34 whatever 12";
// Each number will be temporarily stored in this variable.
Double numberInput;
// Counter used to keep track of the valid number inputs.
int counter = 0;
// The index directly after the number ends.
int endIndex = 0;
// Now we simply loop through the string.
for (int beginIndex = 0; beginIndex < input.length(); beginIndex = endIndex + 1) {
// Get the index of the next space character.
endIndex = input.indexOf(" ", beginIndex);
// If there are no more spaces, set the endIndex to the end of the string.
if (endIndex == -1) {
endIndex = input.length();
}
// Take out only the current number from the input.
String numberString = input.substring(beginIndex, endIndex);
try {
// If the number can be converted to a Double, increase the counter.
numberInput = Double.parseDouble(numberString);
counter++;
} catch (java.lang.NumberFormatException nfe) {
// Some error handling.
System.err.println("Invallid input: " + numberString);
}
}
System.out.println("Total valid numbers entered: " + counter);
输出:
Invalid input: something
Total valid numbers entered: 7
Invalid input: whatever
编辑:道歉,我打开了答案窗口,没有看到其他回复。拆分功能应该完美:)
答案 2 :(得分:0)
您可以按空格拆分并计算元素数量:
System.out.println("20".split (" ").length);
System.out.println("20 30".split (" ").length);
这将分别打印1和2。
以下是fiddle。
答案 3 :(得分:0)
这是我的解决方案。它比使用Split方法的解决方案稍长,但它只包含结果中的数值。所以对于以下输入:
12 32 234 555 24 sdf 4354 dsf34r34 rfedfg 4353
该函数将在数组中返回以下值:
12
32
234
555
24
4354
4353
这是功能:
private static String[] getWholeNumbers(String input) {
ArrayList<String> output = new ArrayList<String>();
Pattern pattern = Pattern.compile("\\b\\d+\\b");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
output.add(matcher.group());
}
return output.toArray(new String[output.size()]);
}
如果您只需要计数,则可以轻松更改该功能。
答案 4 :(得分:0)
如果您可以将输入作为字符串,然后从字符串中检索数字,那会更好。
Scanner input=new Scanner(System.in);
String st=input.nextLine();
String[] split=st.split(" ");
ArrayList<Integer> temp=new ArrayList<>();
String regex="^[0-9]+$";
for(int i=0;i<split.length;i++)
{
if(split[i].matches(regex)) temp.add(Integer.parseInt(split[i]));
}
现在你将所有的温度都设为ArrayList<Integer>