在 for 循环中连接字符串

Concat String in a for loop

我正在尝试创建一个程序,它接受用户输入的每个数字并将它们分类为偶数、奇数和数字零值。

结果应如下所示:

User Input: 14005

Output:
Even Numbers: 4
Odd Numbers: 1, 5
Zero's: 0, 0

这是我写的代码,我想过使用字符串连接以便在每次循环检查下一个字符时添加一个新值,但不知道我的想法是否正确,如果有人能告诉我我哪里想错了,我会很感激的。

package com.craydesign;

import javax.swing.JOptionPane;

public class Main {

    public static void main(String[] args) {
        String number = JOptionPane.showInputDialog("Please enter a number: ");
        String evenNumbers = "";
        String oddNumbers = "";
        String numberZero = "";

        for(int i = 0; i < number.length(); i++) {
            if(number.charAt(i) % 2 == 0) {
                evenNumbers.concat(Integer.toString(i) + ", ");
            } else if(number.charAt(i) % 2 != 0) {
                oddNumbers.concat(Integer.toString(i) + ", ");
            } else if (number.charAt(i) == 0){
                numberZero.concat(Integer.toString(i) + ", ");
            }
        }

        JOptionPane.showMessageDialog(null, "Even numbers: " + evenNumbers + "\n" + "Odd numbers: " + oddNumbers + "\n" + "Zero's: " + numberZero);

    }

}

使用Character.getNumericValue()代替charAt(i)

public static void main(String[] args) throws IOException
    {

          String number = JOptionPane.showInputDialog("Please enter a number: ");
          StringBuffer evenNumbers = new StringBuffer();
          StringBuffer oddNumbers =new StringBuffer();
          StringBuffer numberZero =new StringBuffer();

        for(int i = 0; i < number.length(); i++) {
          int value=Character.getNumericValue(number.charAt(i));
          if(value!=0 && value % 2 == 0) {
              evenNumbers.append(value).append(',');
          } else if(value % 2 != 0) {
              oddNumbers.append(value).append(',');
          } else if (value == 0){
              numberZero.append(value).append(',');
          }
        }

          JOptionPane.showMessageDialog(null, "Even numbers: " + evenNumbers + "\n" + "Odd numbers: " + oddNumbers + "\n" + "Zero's: " + numberZero);


      }

编辑:(按排序顺序显示数字)

     String evenNo[]=evenNumbers.toString().split(",");
      String oddNo[]=oddNumbers.toString().split(",");

      Arrays.sort(evenNo);
      Arrays.sort(oddNo);

      JOptionPane.showMessageDialog(null, "Even numbers: " +  Arrays.toString(evenNo) + "\n" + "Odd numbers: " + Arrays.toString(oddNo) + "\n" + "Zero's: " + Arrays.toString(numberZero.toString().substring(0, 

numberZero.length()-1).split(",")));

您正在使用字符串进行输出并将输出附加到字符串中。

这是个坏主意。因为 String class 是不可变的,所以如果您更改 String 中的任何内容,它将在内存中创建一个新对象。

因此您的解决方案将占用额外的内存。

据我所知,你可以通过两种方式解决这个问题

  1. 使用 StringBuffer class 而不是 String class 来追加
  2. 使用 ArrayList 存储您的结果。并遍历 arraylist 并根据需要显示输出。

谢谢, 阿曼