Java 提取同一字符的两个字符之间的字符串
我了解如何在两种不同类型的字符串之间提取字符串,如[and],或(),等等 但我不知道的是如何获得1个字符之间的多个/所有字符串。 例如: 它应该返回“*”: 它还应该返回“**”: 所有库、正则表达式模式等都不支持此功能。此正则表达式:Java 提取同一字符的两个字符之间的字符串,java,string,Java,String,我了解如何在两种不同类型的字符串之间提取字符串,如[and],或(),等等 但我不知道的是如何获得1个字符之间的多个/所有字符串。 例如: 它应该返回“*”: 它还应该返回“**”: 所有库、正则表达式模式等都不支持此功能。此正则表达式: [\*]+([a-z ]*)[\*]+ 将匹配您正在寻找的内容。看 末尾的[\*]+匹配一个或多个*s ([a-z]*)匹配a-z和空格之间的字符,并返回该字符 现在,由于Andy turner指出它也与*dog*********中的dog匹配,您可以执
[\*]+([a-z ]*)[\*]+
将匹配您正在寻找的内容。看
- 末尾的
匹配一个或多个[\*]+
s*
匹配a-z和空格之间的字符,并返回该字符([a-z]*)
*dog*********
中的dog
匹配,您可以执行以下操作:
[\*]{1,2}([a-z ]*)[\*]{1,2}
这将在1和2之间匹配*
s。(请参阅)您可以将其更改为任何范围,但请注意,{1,3}
将匹配1,2或3次,而不仅仅是1和3次
String str="the *big* brown fox *jumps over* the *lazy* **dog**"
str = str.replace("**", "*");
然后在循环中执行您正在使用的提取方法,使用
indexOf
和substring
创建您自己的方法,该方法尊重您的条件,并使用StringBuilder构建输出字符串您需要与“(*\w+*)”和“(***\w+**”)等组匹配的regexp看,这不太有效-它不匹配相同的开始和结束。例如,它将匹配*狗*********
(对于**狗***
,它将匹配***
和***
)。@然后你就对了。但这不是一个要求。是吗?@AndyTurner编号,用于**狗**
。它会匹配狗看到链接了吗?@MilanvanDijck不,没有<代码>[\*]+尝试匹配尽可能多的*
s。所以,他们已经走了。我们只返回(
和之间的部分)
哦,好的。但是它确实匹配*dog*********
。有一种更优雅的方法来解决它(使用正则表达式),但这并没有错,不应该被否决。
String test = "the *big* brown fox *jumps over* the *lazy* **dog**";
StringTokenizer st = new StringTokenizer(test,"*");
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
[\*]{1,2}([a-z ]*)[\*]{1,2}
String str="the *big* brown fox *jumps over* the *lazy* **dog**"
str = str.replace("**", "*");
String test = "the *big* brown fox *jumps over* the *lazy* **dog**";
StringTokenizer st = new StringTokenizer(test,"*");
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}