首页 > 解决方案 > 如何忽略除第一次和最后一次出现之外的所有字符来执行子字符串?

问题描述

我尝试提取特定内容。该内容是findTestObject函数的参数。所以我建立了这个方法:

Java 代码

String testObjectExtracted = line.substring(line.indexOf("(") + 1, line.indexOf(")") + 1);
String testObjectPathExtracted = StringUtils.substringBetween(testObjectExtracted, "findTestObject(", ")");
testObjectPathExtracted = testObjectPathExtracted.substring(1, testObjectPathExtracted.length() - 1);

System.out.println(line);
System.out.println(testObjectExtracted);
System.out.println(testObjectPathExtracted);

示例确定

WebUI.click(findTestObject('Menu/span_Menu'))
findTestObject('Menu/span_Menu')
Menu/span_Menu

示例 KO

WebUI.click(findTestObject('Menu/Test/link (AA)'))
findTestObject('Menu/Test/link (AA)
Menu/Test/link (A
// Expected result : Menu/Test/link (AA)

但是,正如您在上面的示例中看到的那样,如果路径中有(or ,我将面临问题),因为我的子字符串基于(and )

请问您有什么解决办法吗?谢谢你。

标签: java

解决方案


解决方法是使用lastIndexOf()方法。

String testObjectExtracted = line.substring(line.indexOf("(") + 1, line.lastIndexOf(")"));
String testObjectPathExtracted = testObjectExtracted.substring(testObjectExtracted.indexOf("(") + 1, testObjectExtracted.lastIndexOf(")"));
testObjectPathExtracted = testObjectPathExtracted.substring(1, testObjectPathExtracted.length() - 1);

推荐阅读