【问题标题】:split string only on first instance - java仅在第一个实例上拆分字符串 - java
【发布时间】:2013-08-30 01:07:00
【问题描述】:

我想用 '=' 字符分割一个字符串。但我希望它只在第一个实例上拆分。我怎样才能做到这一点 ?这是 '_' char 的 JavaScript 示例,但它对我不起作用 split string only on first instance of specified character

例子:

apple=fruit table price=5

当我尝试 String.split('=');它给了

[apple],[fruit table price],[5]

但我需要

[apple],[fruit table price=5]

谢谢

【问题讨论】:

  • 你不需要转义=

标签: java string split


【解决方案1】:
string.split("=", 2);

正如String.split(java.lang.String regex, int limit) 解释的那样:

此方法返回的数组包含此字符串的每个子字符串,这些子字符串由与给定表达式匹配的另一个子字符串终止或以字符串结尾终止。数组中的子字符串按照它们在此字符串中出现的顺序排列。如果表达式与输入的任何部分都不匹配,则结果数组只有一个元素,即这个字符串。

limit 参数控制应用模式的次数,因此会影响结果数组的长度。如果限制 n 大于零,则模式将最多应用 n - 1 次,数组的长度将不大于 n,并且数组的最后一个条目将包含最后一个匹配分隔符之外的所有输入。

例如,字符串boo:and:foo 使用这些参数产生以下结果:

Regex Limit    Result
:     2        { "boo", "and:foo" }
:     5        { "boo", "and", "foo" }
:    -2        { "boo", "and", "foo" }
o     5        { "b", "", ":and:f", "", "" }
o    -2        { "b", "", ":and:f", "", "" }
o     0        { "b", "", ":and:f" }

【讨论】:

  • 理解起来令人困惑,但它确实有效!谢谢!
  • 一些澄清:限制 2 将返回最多 2 个元素的列表。如果表达式不匹配,它可能会返回一个包含 1 个元素的列表。如果表达式有 2 个匹配项,则返回数组的第二个元素不会被拆分。
【解决方案2】:

可以,只需将整数参数传递给 split 方法

String stSplit = "apple=fruit table price=5"

stSplit.split("=", 2);

这是一个 java 文档参考:String#split(java.lang.String, int)

【讨论】:

    【解决方案3】:

    正如许多其他答案所暗示的极限方法,这可能是另一种方法

    您可以在 String 上使用 indexOf 方法,该方法将返回给定字符的第一次出现,使用该索引可以获得所需的输出

    String target = "apple=fruit table price=5" ;
    int x= target.indexOf("=");
    System.out.println(target.substring(x+1));
    

    【讨论】:

    • 这不会拆分而是提取第二部分。采取第一部分将需要另一行代码...4 行 vs. 1 = 大拇指向下
    【解决方案4】:
    String string = "This is test string on web";
    String splitData[] = string.split("\\s", 2);
    
    Result ::
    splitData[0] =>  This
    splitData[1] =>  is test string  
    
    
    String string = "This is test string on web";
    String splitData[] = string.split("\\s", 3);
    
    Result ::
    splitData[0] =>  This
    splitData[1] =>  is
    splitData[1] =>  test string on web
    

    默认分割方法根据给定的正则表达式创建 n 个数组。但是,如果您想限制拆分后创建的数组数量,而不是将第二个参数作为整数参数传递。

    【讨论】:

    • 出了什么问题?包括更多细节,使您的答案不言自明!
    【解决方案5】:

    这行得通:

    public class Split
    {
        public static void main(String...args)
        {
            String a = "%abcdef&Ghijk%xyz";
            String b[] = a.split("%", 2);
            
            System.out.println("Value = "+b[1]);
        }
    }
    

    【讨论】:

      【解决方案6】:
      String[] func(String apple){
      String[] tmp = new String[2];
      for(int i=0;i<apple.length;i++){
         if(apple.charAt(i)=='='){
            tmp[0]=apple.substring(0,i);
            tmp[1]=apple.substring(i+1,apple.length);
            break;
         }
      }
      return tmp;
      }
      //returns string_ARRAY_!
      

      我喜欢编写自己的方法:)

      【讨论】:

      • 这个方法用处不大,因为分隔符是硬编码的。此外,使用 for 循环实现线性搜索与使用 String.indexOf 查找第一个分隔符的位置相比没有任何优势。第三,查看返回了多少个 String 元素并不直观。当我们谈论将事物一分为二时,请考虑使用 Pair 数据类型,它恰好代表两个字符串,而不是创建一个数组。
      猜你喜欢
      • 2011-06-04
      • 1970-01-01
      • 2016-04-29
      • 2012-06-16
      • 1970-01-01
      • 2017-12-15
      • 2011-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多