我有一个想要读入IDE的csv文件,其格式为:
Boston (MA), New York City (NY, CT, NJ)
New York City (NY, CT, NJ), Philadelphia (PA, NJ)
...
我将读取该行并将该字符串拆分为逗号,创建一个字符串数组,但我只想要城市名称
我想删除围绕它的所有括号。有什么方法可以做到吗?
答案 0 :(得分:1)
答案 1 :(得分:1)
您可以使用Regular Expression:
执行此类操作String fileLineString = "Boston (MA), New York City (NY, CT, NJ)";
final Pattern REMOVE_BRACKETED = Pattern.compile("\\(.+?\\)");
Matcher matcher = REMOVE_BRACKETED.matcher(fileLineString);
String res = matcher.replaceAll("").replaceAll(" , ", ",").trim();
String[] cities = res.split(",");
//Display the cities Array in Console...
for (int i = 0; i < cities.length; i++) {
System.out.println(cities[i]);
}
控制台输出将是:
Boston
New York City
要使用的RegEx模式基本上这样做,找到任何打开的括号\\(
以及任何单个或多个字符(换行符除外),无论在结束括号.+?
之前有多少\\)
遇到了。
然后我们通过 Matcher.matcher()方法运行此模式。
然后我们声明一个String变量(名为 res )并使用 Matcher.replaceAll()方法返回的字符串对其进行初始化,该方法替换了每个子序列。输入序列将模式与给定的替换字符串匹配,我们在方法中使用&#34;&#34; 来表示我们要替换匹配的内容。然后我们应用 String.replaceAll()方法(如:.replaceAll(" , ", ",")
)来清除逗号分隔符前后不需要的空格,最后我们应用字符串.trim()从整个结果字符串中删除任何前导或尾随空格。如果有的话。
现在我们只需使用 String.split()方法创建一个名为 cities 的字符串数组。其余的代码我很确定你能搞清楚。
<强>更新强>
只是因为这种方式让我有点烦恼......
上面的代码适用于包含未嵌套的括号的字符串,但如果有嵌套的括号则会失败。如果您发现您的字符串不时包含嵌套的括号,那么您可以使用下面的方法删除甚至嵌套的括号。
String fileLineString = "Boston (MA), New York City (NY, (CT), NJ)";
Pattern pattern = Pattern.compile("\\([^()]*\\)");
String wasString;
String res = fileLineString;
do {
wasString = res;
res = pattern.matcher(wasString).replaceAll("");
} while (!wasString.equals(res));
res = res.replaceAll("\\s+,\\s+", ",").trim();
String[] cities = res.split(",");
//Display the cities Array in Console...
for (String citie : cities) {
System.out.println(citie);
}
输出到控制台将是:
Boston
New York City
如果您想在正则表达式中添加其他括号,例如{},[],甚至&lt;&gt;然后你可以这样做:
"\\([^()]*\\)"
"\\([^()]*\\)|\\{[^{}]*\\}"
"\\([^()]*\\)|\\{[^{}]*\\}||\\[[^\\[\\]]*\\]"
"\\([^()]*\\)|\\{[^{}]*\\}||\\[[^\\[\\]]*\\]|\\<[^<>]*\\>"
对于最后一个,在字符串中遇到四个括号中的哪一个并不重要,即使任何一个或全部嵌套在另一个中,它们的内容也将从字符串中删除。
答案 2 :(得分:0)
如果我处理这个问题,我将使用IDE正则表达式替换所有“)”,“to”)\ n“,然后你将文档转换为多行,用逗号分隔。然后,您可以轻松获得国家和城市。
答案 3 :(得分:0)
你需要尝试这样的事情。
示例代码
String str = "Boston (MA), New York City (NY, CT, NJ),New York City (NY, CT, NJ), Philadelphia (PA, NJ)";
Pattern bracket = Pattern.compile("(.*?)\\(.*?\\),?");
Matcher matcher = bracket.matcher(str);
while(matcher.find()) {
System.out.println(matcher.group(1).trim());
}
它只返回城市名称。