繁体   English   中英

如何在字符串中添加未定义的数字字符数,那么我可以将字符串转换为int?

[英]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行。 我已经找到了答案,但它们都是预定义数量的字符。

我能做什么?

您应该使用以下方法之一:

  1. Character.toString(input.charAt(i))
  2. "" + input.charAt(i)
  3. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM