从电话号码字符串条目中删除所有特殊字符,除了 + 仅出现在第一位 [关闭]
Posted
技术标签:
【中文标题】从电话号码字符串条目中删除所有特殊字符,除了 + 仅出现在第一位 [关闭]【英文标题】:Remove all special characters from a phone number string entry except + occurring only at first place [closed] 【发布时间】:2013-06-20 13:44:19 【问题描述】:我想从电话号码字符串条目中删除除 + 符号之外的所有特殊字符。如果它只发生在第一个地方,那也是如此。 示例:+911234567890 应该有效,但 +91+1234#1234 应该无效。
【问题讨论】:
你什么都没试过 请提供你的代码。 【参考方案1】:这是给你的答案。但请尝试一下,然后提出问题,这样你就可以提高自己。至少尝试一下不直接使用代码来理解它
public static boolean isValid(String number)
if(number.startsWith("+"))
number=number.substring(1);
try
Integer.parseInt(number);
catch (Exception e)
return false;
return true;
【讨论】:
嘿,我同意我没有发布代码,但这并不意味着我没有尝试过任何东西。另外,我要求替换字符,而不是通过捕获异常来找到它。谢谢你的建议:)【参考方案2】:你可以使用类似的东西:
String number = "+91+1234#1234"
number=number.replaceAll("[\\D]", "")
这会将所有非数字字符替换为空格,但是对于开头的附加“+”,您可能需要将其作为前缀添加到结果中。
希望这会有所帮助!
【讨论】:
【参考方案3】:Scanner scan=new Scanner(System.in);
String input=scan.next();
String onlyDigits = input.replaceAll("[^0-9]+","");
System.out.println(onlyDigits);
【讨论】:
【参考方案4】:试试这个
public static void main(String arg[])
String num="+45*#545454*j";
String edited="";
for (int i=0;i<num.length();i++)
char c=num.charAt(i);
if (i==0&&c=='+')
edited+=c;
else if (Character.isDigit(c))
edited+=c;
System.out.println(edited);
【讨论】:
【参考方案5】:使用MaskFormatter 来限制输入,类似这样
MaskFormatter formatter = null;
try
formatter = new MaskFormatter("+###");
catch (ParseException e)
e.printStackTrace();
JFormattedTextField tf = new JFormattedTextField(formatter);
构造函数中的字符串“+###”定义了可以在文本字段中输入的内容;在这种情况下,第一个字符需要是“+”,后面三个需要是数字。详情请见API。
【讨论】:
【参考方案6】:最好的方法是使用正则表达式:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main
public static void main(String[] args)
String sPhoneNumber = "+911234567890";
Pattern pattern = Pattern.compile("^[+]\\d*");
Matcher matcher = pattern.matcher(sPhoneNumber);
if (matcher.matches())
System.out.println("Phone Number Valid");
else
System.out.println("Phone Number must start from + ");
【讨论】:
是的,我试过这个匹配器,我能够检测到字符串有符号,但我无法替换它们。以上是关于从电话号码字符串条目中删除所有特殊字符,除了 + 仅出现在第一位 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章