Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:替换字符串中的字符_Android_String_Replaceall - Fatal编程技术网

Android:替换字符串中的字符

Android:替换字符串中的字符,android,string,replaceall,Android,String,Replaceall,在我手机上的电话簿中,我有各种联系人,如: +(353) 085 123 45 67 00661234567 0871234567 (045)123456 我正在将它们全部转换为E.164格式,我已经基本完成了,但我需要解决的问题是: 除了第一个字符(如果它是“+”或数字)之外,如何剥离字符串中除数字以外的所有字符(包括空格) string phoneNumberofContact; 例如,上面的例子如下所示: +3530851234567 00661234567 0871234567 04

在我手机上的电话簿中,我有各种联系人,如:

+(353) 085 123 45 67
00661234567
0871234567
(045)123456
我正在将它们全部转换为E.164格式,我已经基本完成了,但我需要解决的问题是:

除了第一个字符(如果它是“+”或数字)之外,如何剥离字符串中除数字以外的所有字符(包括空格)

string phoneNumberofContact;
例如,上面的例子如下所示:

+3530851234567
00661234567
0871234567
045123456
更新 要仅在第一个位置处理
+
,可以执行以下操作:

boolean starsWithPlus = input.charAt(0) == '+';
String sanitized = input.replaceAll("[^0-9]", "");

if (startsWithPlus) {
    sanitized = "+" + sanitized;
}
所以基本上我要检查它是否以加号开头,然后去掉除数字以外的所有内容,然后重新加上加号,如果它存在的话

起初的 假设您只想保留
+
或数字,一个简单的正则表达式就可以了,
String
提供了
replaceAll()
方法,使之更加简单

String sanitized = input.replaceAll("[^+0-9]", "");
更新 要仅在第一个位置处理
+
,可以执行以下操作:

boolean starsWithPlus = input.charAt(0) == '+';
String sanitized = input.replaceAll("[^0-9]", "");

if (startsWithPlus) {
    sanitized = "+" + sanitized;
}
所以基本上我要检查它是否以加号开头,然后去掉除数字以外的所有内容,然后重新加上加号,如果它存在的话

起初的 假设您只想保留
+
或数字,一个简单的正则表达式就可以了,
String
提供了
replaceAll()
方法,使之更加简单

String sanitized = input.replaceAll("[^+0-9]", "");

这种方法可以奏效

public String cleanPhoneDigits(String phonenum) {
StringBuilder builder = new StringBuilder();
if (phonenum.charAt(0).equals('+') {
     builder.append('+');
}
for (int i = 1; i < phonenum.length(); i++) {
    char c = phonenum.charAt(i);
    if (Character.isDigit(c)) {
        builder.append(c);
    }
}
return builder.toString();
}
公共字符串cleanPhoneDigits(字符串phonenum){
StringBuilder=新的StringBuilder();
if(phonenum.charAt(0).equals('+')){
builder.append('+');
}
对于(int i=1;i
这种方法可以达到目的

public String cleanPhoneDigits(String phonenum) {
StringBuilder builder = new StringBuilder();
if (phonenum.charAt(0).equals('+') {
     builder.append('+');
}
for (int i = 1; i < phonenum.length(); i++) {
    char c = phonenum.charAt(i);
    if (Character.isDigit(c)) {
        builder.append(c);
    }
}
return builder.toString();
}
公共字符串cleanPhoneDigits(字符串phonenum){
StringBuilder=新的StringBuilder();
if(phonenum.charAt(0).equals('+')){
builder.append('+');
}
对于(int i=1;i
但是如何处理第一个字符呢?除了字符串的开头,你还有
+
字符吗?可能是。+是数字键盘上的一个符号。@CHarris我更新了我的答案来处理这个问题。如果你需要处理保留+的问题,如果不是第一个字符,而是第一个字符是+或数字,你可以可以先运行我原来的清理正则表达式,然后运行我更新的代码。但是如何处理第一个字符呢?除了字符串的开头之外,您还有
+
字符吗?可能是。+是数字键盘上的一个符号。@CHarris我更新了我的答案来处理这种情况。如果需要处理,请保留+如果不是第一个字符Racker,但如果它是第一个+或数字字符,则可以先运行我的原始Sanitation regex,然后运行我的更新代码。