[英]How can I add an undefined number of digit characters to a string, so then I can convert the string to an int?
我想编写一个简单的程序,要求您通过键盘输入数字(每个数字用空格或逗号分隔),然后将它们从低到高排序。
我想到的是要求用户通过键盘输入数字,将输入设置为String对象,然后通过for循环传递String,确定字符是数字还是普通字符。 如果caracter是一个数字,它将附加到一个String数组的字段并查找下一个数字并执行相同的操作,直到一个字符不是数字; 在这种情况下,它会查找另一个数字并重复相同的过程,但使用下一个String数组的字段。 一旦程序通过了String String的长度,String Array的每个字段都将转换为int,因此可以对其进行排序。
问题是我不知道如何向String
添加未定义数量的字符。 我所做的是以下内容:
public class StartHere {
public static void main(String[] args) {
int[] numbers;
String input;
boolean fieldUsed = false;
int len = 0;
Scanner scanner = new Scanner(System.in);
input = scanner.next();
numbers = new int[input.length()];
String[] aux = new String[input.length()];
int numOfAuxField = 0;
for (int i = 0; i < input.length(); i++) {
do{
if(Character.isDigit(input.charAt(i))){
aux[numOfAuxField].append((input.charAt(i)).toString());
i++;
fieldUsed = true;
}else{
if(fieldUsed == true){
numOfAuxField++;
}
} while(Character.isDigit(input.charAt(i)));
}
for (int a = 0; a < numbers.length; a++){
if(aux[a] != null){
numbers[a] = Integer.parseInt(aux[a]);
}
}
}
}
但它说
无法在基本类型char上调用toString()
在第16行。 我已经找到了答案,但它们都是预定义数量的字符。
我能做什么?
您应该使用以下方法之一:
Character.toString(input.charAt(i))
"" + input.charAt(i)
String.valueOf(input.charAt(i))
代替(input.charAt(i)).toString()
原始类型没有方法可以使用它们。
你可以改变
(input.charAt(i)).toString()
至
String.valueOf(input.charAt(i))
Scanner类已经做了令牌:它可以识别数字。
您也可以使用BufferedReader。
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line = in.readLine();
if (line == null) { // Nothing read
return;
}
然后可以将输入行分成数字,由模式\\D+
=非数字序列分隔。
String[] numbers = line.split("\\D+");
int[] integers = new int[numbers.lengh()];
for (int i = 0; i < numbers.length; ++i) {
integers[i] = Integer.parseInt(numbers[i]);
}
Arrays.sort(integers);
你的方法也很好,但是事先并不知道输入了多少个数字。 因此,由于数组是固定大小的,最好使用List<String>
,或者可以立即转换为整数。 API的工作方式如下:
List<String> numbers = new ArrayList<>();
numbers.add("123");
int n = numbers.size();
for (int i = 0; i < n; ++i) {
String number = list.get(i);
}
for (String number : numbers) {
...
}
我通过替换aux[numOfAuxField].append((input.charAt(i)).toString());
by aux[numOfAuxField] += (String.valueOf(input.charAt(i)));
Joop Eggen:我对Scanner课程不太了解,所以你的答案将作为我在Google上寻找的一系列内容。
谢谢大家的帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.