java:检索以特定字符串开头和结尾的字符串的一部分

时间:2019-12-15 00:30:21

标签: java string

这是程序,我有一个字符串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()

3 个答案:

答案 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.");
    }
  }
}