【问题标题】:Split a String In Java against the split rule?根据拆分规则在Java中拆分字符串?
【发布时间】:2013-08-29 10:42:39
【问题描述】:

我有一个这样的字符串:

String str="\"myValue\".\"Folder\".\"FolderCentury\"";

是否可以通过. 拆分上面的字符串,而不是得到三个结果字符串,只有两个类似:

columnArray[0]= "myValue"."Folder";
columnArray[1]= "FolderCentury";

或者我必须使用其他 java 方法来完成它吗?

【问题讨论】:

  • 你能概括一下吗?如果它是基于需要,那么下面的答案是可行的。但如果你能给出一些更通用的场景,这将有所帮助。
  • 你上面的不是一个有效的字符串。在 Java 中,您不能在不转义的情况下在字符串中使用引号。出于同样的原因,您的第一个作业也是无效的。请更新您的问题并修正这些错误,以帮助我们更好地了解您的问题。
  • @Dusan 这是 JSON 对象的到来,一切看起来都和我在问题中定义的一样。
  • 如果字符串中有两个以上的点怎么办?如"\"first\".\"second\".\"third\".\"fourth\""。
  • 如果这来自一些 JSON,我建议使用 JSON 解析器来读取它,而不是尝试自己做。

标签: java


【解决方案1】:

试试这个。

     String s = "myValue.Folder.FolderCentury";
     String[] a = s.split(java.util.regex.Pattern.quote("."));

你好程序员/Yannish,

首先 split(".") 将不起作用,并且不会返回任何结果。我认为 java 字符串拆分方法不适用于 .分隔符,所以请尝试使用 java.util.regex.Pattern.quote(".") 而不是 split(".")

【讨论】:

  • 对于反对者:您确实需要java.util.regex.Pattern.quote(".") 才能正确(或者您需要手动输入字符串为"\\.")。 java.lang.String.split()正则表达式 作为其参数,而不仅仅是要拆分的特定字符串。如果不进行此修改,它将在每个字符上拆分字符串,从而生成s.length()+1 空字符串数组作为结果。
【解决方案2】:

正如我在原始帖子 (here) 上发布的,下一个代码:

   String input = "myValue.Folder.FolderCentury";
   String regex = "(?!(.+\\.))\\.";
   String[] result=input.split(regex);
   System.out.println("result: "+Arrays.toString(result));

产生所需的输出(具有两个值的数组):

result: [myValue.Folder, FolderCentury]

【讨论】:

  • 它的返回字符串现在我必须再次从逗号(“,”)中拆分
  • 我进行了编辑,以便更清楚地表明 split 方法的结果是具有请求值的数组
【解决方案3】:

如果您要解决的问题确实非常具体,您甚至可以完全不使用正则表达式匹配:

int lastDot = str.lastIndexOf(".");
columnArray[0] = str.substring(0, lastDot);
columnArray[1] = str.substring(lastDot + 1);

【讨论】:

  • 为此我们增加了 3 个变量
  • @Programmer 你必须添加一个临时变量lastDot。这是正确的。为什么会有这样的问题?
猜你喜欢
  • 1970-01-01
  • 2020-09-09
  • 1970-01-01
  • 2018-05-12
  • 2019-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
相关资源
最近更新 更多