【问题标题】:Java 1.4 sub string retreivalJava 1.4 子字符串检索
【发布时间】:2014-06-04 12:14:12
【问题描述】:

我有一个字符串:

     thorax1  [00400 - 00479]
    su  [00100 - 0022200su]
    head1  [00100 - 00228]
    head1  [00100 - 00228]
    thorax1  [00400 - 00479]
    lab66  [lab661]

这也可能很大。我需要检索方括号中的值,

即00400 - 00479, 00100 - 0022200su ,00100 - 00228

我用过:

String Lab1=thorax1  [00400 - 00479]
su  [00100 - 0022200su]
head1  [00100 - 00228]
head1  [00100 - 00228]
thorax1  [00400 - 00479]
lab66  [lab661]

Lab1=    Lab.substring(Lab.indexOf("[")+1,Lab.indexOf("]"));

但这只是给我00400 - 00479

我需要像00400 - 00479, 00100 - 0022200su ,00100 - 00228 and so on.这样的输出

谁能帮我得到欲望输出?

【问题讨论】:

  • 它是一个非常古老的项目。
  • “它是一个非常古老的项目”,这并不意味着它只能在旧的 Java 虚拟机上运行。无论如何substring(int start, int end) 返回 one 字符串,包括从位置start(包括)到位置end(不包括)的所有字符。您应该考虑使用循环来创建更多结果,并在他们发现的最后一个位置之后开始寻找下一个[ 和]。考虑使用indexOf(String str, int fromIndex) 或使用Pattern 和Matcher 类的正则表达式。
  • 使用Matcher,以及像"\\[([^]]+)\\]"这样的正则表达式

标签: java substring java1.4


【解决方案1】:

问题是您尝试执行的操作只能执行一次。您需要将该逻辑(并添加更多)放入一个循环中。

这应该可以满足您的需要:

String Lab = "thorax1  [00400 - 00479]"
                + "su  [00100 - 0022200su] "
                + "head1  [00100 - 00228] "
                + "head1  [00100 - 00228] "
                + "thorax1  [00400 - 00479] " +
                    "lab66  [lab661]";


        int first = 0;
    int last = 0;
    while(true)
    {   
        first = Lab.indexOf("[", first) + 1;
        last = Lab.indexOf("]", first);
        if(first <= 0)
        {
            break;
        }
        System.out.println(Lab.substring(first, last));
    }

产量:

00400 - 00479
00100 - 0022200su
00100 - 00228
00100 - 00228
00400 - 00479
lab661

【讨论】:

  • 这是给出输出,但我需要用逗号分隔的单个字符串中的输出。 :(
  • @Suman 那么您可以使用相同的基本算法,但将append 每个子字符串转换为StringBuilder 而不是打印出来。
【解决方案2】:

您可以尝试拆分字符串并将每个单独的部分添加到 ArrayList 数组中, 然后循环遍历它。

【讨论】:

    猜你喜欢
    • 2017-01-04
    • 2018-05-22
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多