检查数组元素的类型

Checking the type of the Array elements

我已经设法将用户输入添加到 ArrayList

现在我想拆分这个列表。所以字母与字母,数字与数字

即,我想获得两个单独的 lists(或数组):digitsletters.有办法吗?

我是 java 的新手,所以现在我不知道该去哪里。我认为我需要根据类型 intcharString?)检查数组的每个元素,但我不知道该怎么做。

public class BaseClass {
    
    public static void main(String[] args) {
    
        Scanner takeData = new Scanner(System.in);
    
        String str = takeData.nextLine();
        ArrayList<Character> chars = new ArrayList<Character>();
        for (char c : str.toCharArray()) {
            chars.add(c);
        }
    
        System.out.println(chars);
    }
}

有很多方法可以解决。对于外部库,请参阅 Baeldung.

上的文章
private Pattern pattern = Pattern.compile("-?\d+(\.\d+)?");

public boolean isNumeric(String strNum) {
    if (strNum == null) {
        return false; 
    }
    return pattern.matcher(strNum).matches();
}

另一种方法是将 char 转换为 int 并将它们与 ASCII table

进行比较
for(char c : str.toCharArray()) {
  chars.add(c);
  int letter = c;
  if (letter >= 48 && letter <= 57) {
    System.out.println("Number: " + letter);
  } else {
    System.out.println("Something else: " + letter);
  }
}

此外,还有一个更好的核心 Java 方式,使用这些方法:

Character.isDigit(letter);
Character.isLetter(letter);

详情见tutorial

Now I want to sort it so that letters are with letters, numbers are with numbers

所以你想对给定的列表进行排序,以便将数字与字母分开。

您可以通过定义自定义 Comparator这是一个特殊对象,用于比较两个对象并定义集合、流等元素的顺序).

下面是一个比较器,首先判断给定的字符是否为数字,然后根据自然顺序比较字符(have a look at this tutorial for more information on Java-8 comparators)。

List<Character> chars = new ArrayList<>(List.of('1', 'a', '2', 'b', 'c', '3'));

Comparator<Character> lettersFirst = 
    Comparator.comparing((Character ch) -> Character.isDigit(ch))
              .thenComparing(Comparator.naturalOrder());

chars.sort(lettersFirst);
System.out.println(chars);

输出

[a, b, c, 1, 2, 3]

I want to obtain two separate lists (or arrays): digits and letters.

如果您只需要将数字与字母分开而不对它们进行排序并省略其他符号,则可以使用 Character class isLetter() and isDigit().

的静态方法
String str = "lemon 123 abc";
List<Character> digits = new ArrayList<>();
List<Character> letters = new ArrayList<>();
for (int i = 0; i < str.length(); i++) {
    char next = str.charAt(i);
    if (Character.isDigit(next)) {
        digits.add(next);
    } else if (Character.isLetter(next)) {
        letters.add(next);
    }
}
    
System.out.println("Letters: " + letters);
System.out.println("Digits: " + digits);

输出

Letters: [l, e, m, o, n, a, b, c]
Digits: [1, 2, 3]

导入java.util.*;

public class 主要{

public static void main(String[] args) {
    
    Scanner takeData = new Scanner(System.in);
    String str = takeData.nextLine();
    
    ArrayList<Character> chars = new ArrayList<Character>();
    
    // checking a character is alphabetic or not with ascii value
    for(char c : str.toCharArray()) {
      int ch = c;
      if ((ch >= 65 && ch <= 91) || (ch >= 97 && ch <= 122)) {
        chars.add(c);
      }
    }
    // checking a character is numeric or not wrt ascii value
    for(char c : str.toCharArray()) {
      int ch = c;
      if ((ch >= 48 && ch <= 57)) {
        chars.add(c);
      }
    }
    System.out.println(chars);
}

}