字符数组

时间:2014-02-03 04:58:40

标签: java arrays

Following方法接收一个Character对象数组,并返回一个只包含数字字符的新数组。

实施例; old[] array:{1,R,Y,O,2,3,3 }----new [] array: {1,2,3,3}

这是我的代码,并没有返回我希望它返回的内容。

public static char[] getDigits(char[] charArray) {    

5 个答案:

答案 0 :(得分:1)

我认为你需要做两个循环才能正确调整数组的大小。

public static char[] getDigits(char[] charArray) {
  int digitCount = 0;
  for (char ch : charArray) {
    if (Character.isDigit(ch)) {
      digitCount++;
    }
  }
  char[] toReturnDigits = new char[digitCount];
  int index = 0;
  for (char ch : charArray) {
    if (Character.isDigit(ch)) {
      toReturnDigits[index++] = ch;
    }
  }
  return toReturnDigits;
}

public static char[] getDigitsOld(char[] charArray) {
  int arrayLength = charArray.length;
  char[] toReturnDigits = new char[arrayLength];
  int index = 0;
  for (int i = 0; i < arrayLength; i++) {
    if (charArray[i] >= 48 && charArray[i] <= 57) {
      toReturnDigits[index++] = charArray[i];
    }
  }
  return toReturnDigits;
}

public static void main(String arg[]) {
  char[] old = new char[] { '1', 'R', 'Y', 'O', '2',
      '3', '3' };
  System.out.println(Arrays
      .toString(getDigitsOld(old)));
  System.out.println(Arrays
      .toString(getDigits(old)));
}

输出

[1, 2, 3, 3, 
[1, 2, 3, 3]

答案 1 :(得分:0)

您可以轻松地使用regex执行此操作。

public static char[] getDigits(char[] charArray) {
    Pattern p = Pattern.compile("-?\\d+");
    Matcher m = p.matcher(String.valueOf(charArray));
    String str=new String();
    while (m.find()) {
       str=str+m.group();
    }
    return str.toCharArray();
}

Demo

您也可以通过以下方式轻松完成此任务。

 public static char[] getDigits(char[] charArray) {
  String str=new String();
  for(int i=0;i<charArray.length;i++){
      if(Character.isDigit(charArray[i])){
          str=str+charArray[i];
      }
  }
  return str.toCharArray();
}

答案 2 :(得分:0)

如果要将数组只包含数字,则必须在创建数组或使用列表之前计算位数。

P.S。您应该优先使用Character.isDigit(char)而不是比较。

答案 3 :(得分:0)

也许你可以尝试类似的东西:

public static char[] getDigits(final char[] array){
    final StringBuilder builder = new StringBuilder();
    for(final char c : array)
        if(Character.isDigit(c))
            builder.append(c);
    return builder.toString().toCharArray();
}

答案 4 :(得分:0)

为什么不检查是否是数字?:

public static char[] getDigits(char[] charArray) {    
        int arrayLength = charArray.length;
        char[] toReturnDigits = new char[arrayLength];
        int index = 0;
        for (int i = 0; i < arrayLength; i++) {
            if (parseInt(charArray[i].toString(), 10)) { //assuming you expect base 10 digits
                toReturnDigits[index++] = charArray[i];
            }
        }
        return toReturnDigits;
    }

编辑:要解决数组长度的问题,您可以使用动态数组而不是预先分配它:

...

var toReturnDigits = [];

for (int i = 0; i < arrayLength; i++) {
  if (parseInt(charArray[i].toString(), 10)) { //assuming you expect base 10 digits
     toReturnDigits.push(charArray[i]);
    }
 }
return toReturnDigits;