这是程序,我有一个字符串implementation "androidx.ui:ui-framework:0.1.0-dev03"
,我需要从其中提取包含strLineText
的单词。
例如我需要在字符串target
中提取"random string with IWANTTHISABC-123 and more"
。同样,如果字符串为IWANTTHISABC-123
,则需要提取`IWANTTHISBBC-001。前缀是固定的
我用"random string with IWANTTHISBBC-001"
(Method1) 进行了尝试,但是该逻辑不适用于以该目标词结尾的字符串,即没有任何输出
我尝试了substring()
(Method2) ,它适用于所有四个组合。
您能帮我实现对所有四个组合使用split()
(Method1)
substring()
答案 0 :(得分:0)
strLineText.substring(strLineText.indexOf(target)).indexOf(" ")
在目标字符串后不包含空格,则 strLineText
将为-1。您可以检查strLineText.substring(strLineText.indexOf(target))
是否包含空格,如果没有,请使用子字符串,直到strLineText
的末尾:
//Method1
int beginIndex = strLineText.indexOf(target);
String substring = strLineText.substring(beginIndex);
int endIndex = substring.contains(" ") ? beginIndex + substring.indexOf(" ") : strLineText.length();
System.out.println("O/P 1:" + strLineText.substring(beginIndex, endIndex));
答案 1 :(得分:0)
我认为这非常简单,您只需要从begin index开始计算end index。这是适用于所有情况的代码段。
int begin = strLineText.indexOf(target);
int end = strLineText.indexOf(" ", begin);
if(end == -1) end = strLineText.length();
System.out.println(strLineText.substring(begin, end));
答案 2 :(得分:0)
假设您对“单词”的定义是一个字母序列,不包括数字,符号等。对于“单词”的其他定义,可以相应地调整正则表达式。如果要在目标字符串之前包含部分单词,则可以添加一个循环,该循环从startIndex开始倒数,检查字符是否为字母。
public class Foo
{
public static void main(String[] args)
{
String target = "IWANTTHIS";
// String candidate = "random string with IWANTTHISABC-123 and more";
String candidate = "IWANTTHISCBC-45601 and more";
// String candidate = "IWANTTHISEBC-1";
// String candidate = "random string with IWANTTHISKBC-55545";
int startIndex = -1;
int endIndex = -1;
if(candidate.contains(target))
{
System.out.println("Target located.");
startIndex = candidate.indexOf(target);
System.out.println("target starts at " + startIndex);
// keep adding characters until first non-alpha char
endIndex = startIndex + target.length();
boolean wordEnded = false;
while(!wordEnded && (endIndex >= candidate.length()))
{
String foo = Character.toString(candidate.charAt(endIndex + 1));
if(foo.matches("[a-zA-Z]"))
{
endIndex++;
}
else
{
wordEnded = true;
}
}
String full = candidate.substring(startIndex, endIndex + 1);
System.out.println("Full string = " + full);
}
else
{
System.out.println("No target located. Exiting.");
}
}
}