Java 提取同一字符的两个字符之间的字符串

Java 提取同一字符的两个字符之间的字符串,java,string,Java,String,我了解如何在两种不同类型的字符串之间提取字符串,如[and],或(),等等 但我不知道的是如何获得1个字符之间的多个/所有字符串。 例如: 它应该返回“*”: 它还应该返回“**”: 所有库、正则表达式模式等都不支持此功能。此正则表达式: [\*]+([a-z ]*)[\*]+ 将匹配您正在寻找的内容。看 末尾的[\*]+匹配一个或多个*s ([a-z]*)匹配a-z和空格之间的字符,并返回该字符 现在,由于Andy turner指出它也与*dog*********中的dog匹配,您可以执

我了解如何在两种不同类型的字符串之间提取字符串,如[and],或(),等等

但我不知道的是如何获得1个字符之间的多个/所有字符串。 例如:

它应该返回“*”:

它还应该返回“**”:

所有库、正则表达式模式等都不支持此功能。

此正则表达式:

[\*]+([a-z ]*)[\*]+
将匹配您正在寻找的内容。看

  • 末尾的
    [\*]+
    匹配一个或多个
    *
    s
  • ([a-z]*)
    匹配a-z和空格之间的字符,并返回该字符
现在,由于Andy turner指出它也与
*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());
}