【问题标题】:How can I add an undefined number of digit characters to a string, so then I can convert the string to an int?如何将未定义数量的数字字符添加到字符串中,然后我可以将字符串转换为 int?
【发布时间】:2016-03-25 23:15:00
【问题描述】:

我想编写一个简单的程序,要求您通过键盘输入数字(每个数字用空格或逗号分隔),然后将它们从低到高排序。

我的想法是要求用户通过键盘输入数字,将输入设置为 String 对象,然后将 String 传递给一个 for 循环,以确定字符是数字还是普通字符。 如果字符是数字,它将被附加到字符串数组的字段并查找下一个数字并执行相同的操作,直到一个字符不是数字;在这种情况下,它将寻找另一个数字并重复相同的过程,但使用下一个字符串数组的字段。 一旦程序通过了孔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 行。 我已经在寻找答案,但它们都是针对预定义数量的字符。

我能做什么?

【问题讨论】:

  • 代替.toString,将(String)放在字符前,转换成字符串。
  • 您能否举例说明用户输入的内容以及您期望的结果?谢谢
  • 为什么还要将数字放在字符串中?为什么不只是一个ArrayList&lt;Integer&gt;
  • 由于您是逐个字符读取输入的字符,您是否处理了超过 1 位的数字?

标签: java arrays string algorithm sorting


【解决方案1】:

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

  1. Character.toString(input.charAt(i))
  2. "" + input.charAt(i)
  3. String.valueOf(input.charAt(i))

而不是(input.charAt(i)).toString()


原始类型没有使用它们的方法。

【讨论】:

  • 或者只是"" + input.charAt(i)String.valueOf(input.charAt(i))
【解决方案2】:

你可以改变

(input.charAt(i)).toString()

String.valueOf(input.charAt(i))

【讨论】:

    【解决方案3】:

    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&lt;String&gt;,或者可能立即转换为整数。 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) {
        ...
    }
    

    【讨论】:

      【解决方案4】:

      我通过替换 aux[numOfAuxField].append((input.charAt(i)).toString()); 解决了这个问题 经过 aux[numOfAuxField] += (String.valueOf(input.charAt(i)));

      Joop Eggen:我对 Scanner 类了解不多,因此您的回答将作为我必须在 Google 上查找的内容的清单。

      谢谢大家的帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-10
        • 1970-01-01
        • 2019-10-16
        • 2023-02-01
        • 2015-10-13
        • 1970-01-01
        • 1970-01-01
        • 2020-06-28
        相关资源
        最近更新 更多