我正在尝试获取一个字符串并将所有字符从一个字符删除到另一个字符
示例字符串:
String personAndPhone = " Dave (206515608)"
我想将此字符串转换为两个字符串,人名和电话号码(不带“()”)。
我该怎么做?
试试这个
String a[] = personAndPhone.trim().replaceAll("[()]", "").split(" ");
a[0] -> Dave
a[1] -> 206515608
使用正则表达式:
String name = str.replaceAll("\\s*(.*)\\s*\\(.*", "$1");
String phone = str.replaceAll(".*?\\((.*)\\).*","$1");
这两行都用组 1 替换了整个输入,组 1 捕获了目标。
“名称”是括号内的所有内容,不包括两端的空格,因此它可以捕获“John Smith 3rd”没有问题。
“电话”是第一个和最后一个括号之间的所有内容,因此它将从“戴夫((01)5678 9876)”中捕获“(01)5678 9876”。
我注意到你周围有空间,所以我要做的第一件事就是修剪。
personAndPhone = personAndPhone.trim();
接下来,你在中间有一个空间,这可能是一个很好的分裂点。
String[] tokens = personAndPhone.split(" ");
String name = tokens[0];
// now contains: Dave
接下来,您可以从数字中删除括号:
String number = tokens[1].replaceAll("[()]", "");
// now contains: 206515608
或者正如@EvgeniyDorofeev 更简洁地说:
String[] tokens = personAndPhone.trim().replaceAll("[()]", "").split(" ");
String name = tokens[0];
String number = tokens[1];
我倾向于使用正则表达式来做这样的事情: -
String personAndPhone = " Dave (206515608)"
Pattern pattern = Pattern.compile("([A-Za-z]+)\s\(([0-9]+)\)");
Matcher matcher = pattern.matcher(personAndPhone);
String name = matcher.group(1)
String number = matcher.group(2)
您显然可以根据需要使您的正则表达式更复杂一些。这将使您的解析更加严格。您还可以使用正则表达式对精度和长度检查进行更多控制。
请参阅http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html