Following方法接收一个Character对象数组,并返回一个只包含数字字符的新数组。
实施例;
old[] array:{1,R,Y,O,2,3,3 }----new [] array: {1,2,3,3}
。
这是我的代码,并没有返回我希望它返回的内容。
public static char[] getDigits(char[] charArray) {
答案 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();
}
您也可以通过以下方式轻松完成此任务。
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;