我正在尝试分割输入的号码,例如(123) 456-7890。
String [] split = s.split(delimiters);
我一直在网上寻找如何在括号集合内界定区号的方法,但是我没有找到适用于我的情况的任何方法。我不知道数组是否会影响打印结果。虽然这个数组不是必需的,但由于需要使用split方法,我不知道该怎么做。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class HelloWorld{
public static void main(String[] args){
String phoneNumber = "(123)-456-7890";
String pattern = "\\((\\d+)\\)-(\\d+)-(\\d+)";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(phoneNumber);
if (m.find())
System.out.println(m.group(1) + " " + m.group(2) + " " + m.group(3));
}
}
split
方法。另外,电话号码在括号后面没有连字符:i 是 "(123) 456-7890"
而不是 "(123)-456-7890"
。 - YoYo(XXX) XXX-XXXX
这样的Pattern
,其中X
是数字。您还可以使用{n}
来要求n
次出现。您可以使用()
进行分组。例如,String str = "(123) 456-7890";
Pattern p = Pattern.compile("\\((\\d{3})\\) (\\d{3})-(\\d{4})");
Matcher m = p.matcher(str);
if (m.matches()) {
String areaCode = m.group(1);
String first3digits = m.group(2);
String last4digits = m.group(3);
System.out.printf("(%s) %s-%s%n", areaCode, first3digits,
last4digits);
}
(123) 456-7890
或者,如果你必须使用split
函数,你可以先使用replaceAll
函数去掉(
和)
,然后再进行分割。
String str = "(123) 456-7890";
String[] arr = str.replaceAll("[()]", "").split("[ -]");
System.out.printf("(%s) %s-%s%n", arr[0], arr[1], arr[2]);
(123) 456-7890
split
方法。 - YoYo()
上分割,这样就不需要替换它们了。 - igreenfieldString
。而使用我的方法则不会有这个问题。 - Elliott FrischString s= "(123) 456-7890"
String[] split = s.split("[()-]");
System.out.println("(" + split[1] + ")" + split[2] + "-" + split[3]);
这个有效:
String s= "(123) 456-7890";
String[] parts = s.split("[()\\- ]");
System.out.println("(" + parts[1] + ") " + parts[3] + "-" + parts[4]);
(123
,所以当你执行System.out.println("(" + NumberTokens[0] + ")")
时,你会得到两个括号。要么将(
添加到分隔符并从元素1开始,要么只是不打印"("
。 - Sergey GrinevSystem.out.println("123) 456-7890".replaceAll("\\D", ""));
- Nir Alfasi