我正在尝试取一个字符串并将所有字符从char中删除到另一个
示例字符串:
String personAndPhone = " Dave (206515608)"
我想将此字符串转换为两个字符串,即人名和电话号码(不带“()”)。
我该怎么做?
答案 0 :(得分:3)
试试这个
String a[] = personAndPhone.trim().replaceAll("[()]", "").split(" ");
a[0] -> Dave
a[1] -> 206515608
答案 1 :(得分:3)
使用正则表达式:
String name = str.replaceAll("\\s*(.*)\\s*\\(.*", "$1");
String phone = str.replaceAll(".*?\\((.*)\\).*","$1");
这两行都用组1替换整个输入,组1捕获目标。
“名称”是指向括号的所有内容,不包括两端的空格,因此它会捕获“John Smith 3rd”没问题。
“手机”是第一个和最后一个括号之间的所有内容,因此它将从“Dave((01)5678 9876)”中捕获“(01)5678 9876”。
答案 2 :(得分:2)
我注意到你周围有空格,所以我要做的第一件事就是修剪。
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];
答案 3 :(得分:2)
我倾向于使用正则表达式来做这样的事情: -
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