我需要在 Java String 中找到第一对完整的括号,如果它是非嵌套的,则返回其内容。当前的问题是括号可能在不同的区域设置/语言中由不同的字符表示。
我的第一个想法当然是使用正则表达式。但是,如果使用类似 "\((.*)\)" 的东西,要确保当前考虑的匹配中没有嵌套括号似乎相当困难(至少对我而言),似乎没有Java 匹配器中可用的类括号字符。
因此,我试图更命令地解决问题,但偶然发现我需要处理的数据是不同语言的问题,并且根据语言环境的不同,括号中的字符也不同。西文: (), 中文 (Locale "zh"): ()
package main;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import java.util.HashSet;
import java.util.Set;
public class FindParentheses {
static public Set<String> searchNames(final String string) throws IOException {
final Set<String> foundName = new HashSet<>();
final BufferedReader stringReader = new BufferedReader(new StringReader(string));
for (String line = stringReader.readLine(); line != null; line = stringReader.readLine()) {
final int indexOfFirstOpeningBrace = line.indexOf('(');
if (indexOfFirstOpeningBrace > -1) {
final String afterFirstOpeningParenthesis = line.substring(indexOfFirstOpeningBrace + 1);
final int indexOfNextOpeningParenthesis = afterFirstOpeningParenthesis.indexOf('(');
final int indexOfNextClosingParenthesis = afterFirstOpeningParenthesis.indexOf(')');
/*
* If the following condition is fulfilled, there is a simple braced expression
* after the found product's short name. Otherwise, there may be an additional
* nested pair of braces, or the closing brace may be missing, in which cases the
* expression is rejected as a product's long name.
*/
第二个带中文括号的东西没有找到,但是应该有。当然,我可能会匹配这些字符作为额外的特例,但由于我的项目使用 23 种语言,包括韩语和日语,我更喜欢找到任何一对括号的解决方案。
阿晨1998
哆啦的时光机
翻翻过去那场雪
相关分类