String.substring()OR运算符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了String.substring()OR运算符相关的知识,希望对你有一定的参考价值。

是否可以在substring中执行OR运算符?这是我的,但它不起作用

str.substring(str.indexOf("start")+1, str.indexOf("x|y"))
答案

indexOf不够复杂,无法做到这一点。但是,您可以使用正则表达式来获取子字符串:

Pattern p = Pattern.compile("start(.*?)(?:x|y)");
Matcher m = p.matcher(str);
if (m.find()) {
    String sub = m.group(1);
}

Demo.

另一答案

解:

-> "startthexstrayingx".replaceAll ("start([^xy]*(x|y)).*", "$1") 
|  Expression value is: "thex"
|    assigned to temporary variable $72 of type String

第一组从“开始”开始并捕获,直到满足第一个x或y。

使用String start的锚点,它将只捕获一个匹配项,而不管名称replaceAll:

-> "startstartthexstrayingstartAgainandynotyy".replaceAll ("^start([^xy]*(x|y)).*", "$1") 
|  Expression value is: "startthex"
|    assigned to temporary variable $77 of type String

Demo

从字面上看问题,模式必须是"^s(tart[^xy]*(x|y)).*"但我怀疑这不是故意的。

但不是那样的:

-> String str = "startthex|ystray"
|  Modified variable str of type String with initial value "startthex|ystray"
|    Update overwrote variable str

-> str.substring(str.indexOf("start")+1, str.indexOf("x|y"))
|  Expression value is: "tartthe"
|    assigned to temporary variable $62 of type String

-> String str = "startthexstray"
|  Modified variable str of type String with initial value "startthexstray"
|    Update overwrote variable str

-> str.substring(str.indexOf("start")+1, str.indexOf("x|y"))
|  java.lang.StringIndexOutOfBoundsException thrown: begin 1, end -1, length 14
|        at String.checkBoundsBeginEnd (String.java:3119)
|        at String.substring (String.java:1907)
|        at (#98:1)

以上是关于String.substring()OR运算符的主要内容,如果未能解决你的问题,请参考以下文章

java String.substring 乱码

java代码(android中的java): public String substring(int start) if (start == 0) return this;

String.subString() 和 String.subSequence() 有啥区别

string.substring 与 string.take

C# String.Substring 等效于 StringBuilder?

Java:具有长类型参数的 String.substring()