过滤算法问题


public static String filterPhoneNumber(String phoneNumber) {
Character[] characters = new Character[phoneNumber.length()];
if (characters.length > 9)
{
for (int i = 0; i < characters.length; i++)
{
if (characters[i] != ' ')
{
characters[i] = phoneNumber.charAt(i);
} else
{
Log.d("asd", "wrroooonggggggggg");
}
}
}
return phoneNumber;
}

我试图过滤数字中的空字符,但是当在字符串中找到 2 个或更多空字符时,它只会删除第一个。

你的问题是你在 for 循环中增加了i,当你找到一个空间时,你会跳过它。当您在下一个循环中设置数字时characters您跳过了一个条目。必须使用两个步进变量,一个用于步进phoneNumber,一个用于characters

看起来你想要返回筛选器电话号码,但返回的是你发送的值。

您可以使用 String 上的搜索和替换方法。

public static String filterPhoneNumber(String phoneNumber) {
return phoneNumber.replaceAll(" ","");
}

以下是它的使用方式:http://runnable.com/VUfHvPvHoEdLO3id/filterphonenumber-for-java

如果你使用

char[] characters = new char[phoneNumber.length()];

它有效。

  1. 字符数组的类型应该是char[]
  2. 字符数组永远不会初始化,所以characters[i] != ' '总是 true(前提是你修复了数组类型,否则应该抛出一个NullPointerException)
  3. 你被分配了characters[i] = phoneNumber.charAt(i)但之后你再也没有读过它。

如果您的目标是删除空格,请执行以下操作:

public static String filterPhoneNumber(String phoneNumber) {
return phoneNumber.replaceAll(" ", "");
}

工作 100%

public static String filterPhoneNumber(String phoneNumber) {
byte[] number = phoneNumber.getBytes();
byte[] array = new byte[phoneNumber.length()];
int count=0;
for (int i = 0; i < number.length; i++){
if (number[i] != ' '){
array[count++] = number[i];
}
}
return new String(array);
}
public static void main(String[] args) {
String res = filterPhoneNumber("   +28  23");
System.out.println(res); //OUTPUT "+2823"
}

最新更新