如何从更大的java字符串中提取特定的子字符串
我有以下字符串:如何从更大的java字符串中提取特定的子字符串,java,regex,substring,Java,Regex,Substring,我有以下字符串: String n = "(.........)(......)(.......)(......) etc" 我想写一个方法,用(和)之间的n的每个子字符串填充列表。提前谢谢你 我对String方法不是很熟悉,所以我相信有一种方法可以不用自己编写代码,只需使用一些奇特的方法就可以完成,但现在您可以: 经过测试,工作100%完美:) String String=“(堆栈)(上方)(流动)”; ArrayList子字符串=新的ArrayList(); 对于(int c=0;c
String n = "(.........)(......)(.......)(......) etc"
我想写一个方法,用
(
和)
之间的n
的每个子字符串填充列表。提前谢谢你 我对String方法不是很熟悉,所以我相信有一种方法可以不用自己编写代码,只需使用一些奇特的方法就可以完成,但现在您可以:
经过测试,工作100%完美:)
String String=“(堆栈)(上方)(流动)”;
ArrayList子字符串=新的ArrayList();
对于(int c=0;c
可以在一行中完成:
String[] parts = input.replaceAll("(^.*\\()|(\\).*$)", "").split("\\)\\(");
调用replaceAll()
会去掉括号和尾随括号(加上第一个/最后一个括号之前/之后的任何其他垃圾字符),然后只需对括号对进行split()
。如果(…)对没有嵌套,可以在Java中使用正则表达式。看看java.util.regex.Pattern类。这应该可以:
String in = "(bla)(die)(foo)";
in = in .substring(1,in.length()-1);
String[] out = in .split(Pattern.quote(")("));
我制作了这个正则表达式版本,但有点冗长。我相信这是可以改进的。(注意:“n”是您的输入字符串)
Pattern p=Pattern.compile(“\\(.*?\)”);
匹配器匹配器=p.Matcher(n);
列表=新的ArrayList();
while(matcher.find())
{
list.add(matcher.group(1));//1==在()之间填充
}
你已经尝试过什么?括号可以嵌套吗?这是一件有趣的事情,你会挑战自己去做,而不是让别人为你做!不,没有任何嵌套方括号。它可以工作,但因为它不处理嵌套方括号,所以我看不出它比简单的正则表达式(它也不能处理嵌套方括号)有什么优势newString+=string.charAt(c)
不是很有效,你可以使用StringBuilder
来提高性能。@jlordo我想他必须自己来建立它。(哈哈)聪明。。。假设输入格式正确。您不需要跟踪下一个匹配偏移量并使用find(int)
方法将其插入;no argfind()
方法为您处理所有这些。嘿,您说得对!谢谢你,艾伦!我相应地更新了代码,以从find()调用中删除int offset
计数器及其在循环中的增量(这是一个单词吗?)。
String in = "(bla)(die)(foo)";
in = in .substring(1,in.length()-1);
String[] out = in .split(Pattern.quote(")("));
Pattern p = Pattern.compile("\\((.*?)\\)");
Matcher matcher = p.matcher(n);
List<String> list = new ArrayList<String>();
while (matcher.find())
{
list.add(matcher.group(1)); // 1 == stuff between the ()'s
}