仅在第一个实例上拆分字符串 - java

Posted

技术标签:

【中文标题】仅在第一个实例上拆分字符串 - java【英文标题】:split string only on first instance - 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]

谢谢

【问题讨论】:

你不需要转义= 【参考方案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 数据类型,它恰好代表两个字符串,而不是创建一个数组。

以上是关于仅在第一个实例上拆分字符串 - java的主要内容,如果未能解决你的问题,请参考以下文章

String.Split 仅在 C# 中的第一个分隔符上?

如何在第一个逗号后拆分第一个竖线上的字符串?

MS SQL Server 在空格上拆分单词,但仅在不在双引号中时

在第一个空格出现时拆分字符串

如何在第一个数字之后拆分街道地址?

如何在点上拆分字符串并有效地提取所有字段?