【问题标题】:how do i remove first and last occurrence of the sentence in java如何在java中删除第一个和最后一个出现的句子
【发布时间】:2013-09-30 07:27:46
【问题描述】:

我有以下一行:|A|B|C|D|100|E|GEN|smsplus|11|11|11|,我想删除| 的第一次和最后一次出现。

我必须先检查| 是否在first and last 可用

我确信这会给我带来一些反对票,但我真的不知道该怎么做。

编辑

我还必须检查以下内容:

A|B|C|D|100|E|GEN|smsplus|11|11|11| and |A|B|C|D|100|E|GEN|smsplus|11|11|11 and there is no 

|| 的可能性,这就是为什么我不想给出任何解释。

感谢您宝贵的时间。

【问题讨论】:

  • 我认为它需要正则表达式解决方案,而不是 substring 或 indexOf。
  • @justhalf 这与您提供的内容不重复 :)
  • 你想删除第一个和最后一个|,如果它们可以作为第一个和最后一个字符,对吧?
  • 或许你可以举出更多的例子。您对此的预期输出是什么:AB|CD|EF|?

标签: java regex


【解决方案1】:

您也许可以使用正则表达式:

^\\|(.*)\\|$

并替换为$1:

ideone demo

如果字符串的开头和结尾不是|,则不会有替换。

编辑:根据您的最后一条评论,如果您想删除位于字符串开头和/或结尾的 |,请使用 OR 运算符(其中 | 太多了我认为的问题=P):

^\\||\\|$

替换为空(空字符串""


EDIT2:

如果第一个正则表达式更接近您的需要,但又想删除多个管道,请添加量词:

^\\|+(.*)\\|+$

如果您需要第二个正则表达式(在第一次编辑中)但又想删除多个管道,请再次添加量词!

^\\|+|\\|+$

请注意,两种情况下的替换字符串保持不变

【讨论】:

  • 根据 cmets,有可能字符串的只有一侧是 |,应该删除。
  • @TimPietzcker 是的,我刚才看到了...毕竟这个问题没有很好地表述:(
  • 根据他的 cmets “如果 | 最初和最后都不可用,那么如果我使用你的代码会发生什么?”和他的问题“我必须首先检查 | 是否在第一个和最后一个可用”我认为 OP 希望删除字符,如果它们在开头和结尾都存在。
  • @justhalf 但是在他的另一个 cmets 中,OP 有:“所有,我想删除 | 如果它是第一个并且 if 在最后一个也可用` 而且我只添加了一个选项,这取决于他真正在寻找什么。他可以选择他需要的那个。
  • 是的,这个问题很不清楚。如果末尾有多个管道,如|AB|CD|EF||,怎么办?
【解决方案2】:

你的 cmets 让我相信你想这样做:

String result = subject.replaceAll("^\\||\\|$", "");

这将更改以下每个字符串:

|A|B|C|
|A|B|C
A|B|C|
A|B|C

到同一个字符串A|B|C

regex101.com 上查看。

【讨论】:

    【解决方案3】:

    使用 java.lang.String 包中的 indexOf()lastIndexOf()

        String s="|A|B|C|D|100|E|GEN|smsplus|11|11|11|";
        s=s.substring(s.indexOf("|"),s.lastIndexOf("|"));
        System.out.println(s);    //Prints A|B|C|D|100|E|GEN|smsplus|11|11|11
    

    【讨论】:

    • 我认为他想要一个正则表达式解决方案
    • 他没有提到,只是他标记了
    • @kark 如果| 一开始和最后都不可用,那么如果我使用你的代码会发生什么?
    • 在变量和lastIndexOf之间放点
    • 这也会删除不在字符串开头/结尾的|s。
    【解决方案4】:

    试试,

    String input = "|A|B|C|D|100|E|GEN|smsplus|11|11|11|";
    input = input.substring(1, input.length()-1);
    

    或使用StringUtils.removeStart, removeEnd

    StringUtils.removeStart(input, "|");
    StringUtils.removeEnd(input, "|");
    

    StringUtils.strip(input, "|");
    

    【讨论】:

    • @newuser..你知道|会在哪一行出现
    • 如果要使用StringUtils,可以使用StringUtils.strip(input,"|")
    • @kark 提问者给出了输入字符串。为此,只有我这样做了
    • @newuser.fine..这个问题很好..我接受编辑后的答案
    • @newuser:可以使用StringUtils.strip(input,"|");,不需要将它们分成stripStartstripEnd
    猜你喜欢
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多