【问题标题】:Java Split and Replace StringJava拆分和替换字符串
【发布时间】:2012-03-22 18:37:15
【问题描述】:

我有一个字符串变量。字符串的例子是这样的:

abc
12345 cde123
hyz 
8755 3356

我想通过拆分空格来分配一个数组字符串,就像这样。我只想取它的前 4 个值。

stringArray[0] = abc;
stringArray[1] = 12345;
stringArray[2] = cde123;
stringArray[3] = hyz;

8755 3356 不需要在这个数组字符串中赋值。

但是,abc12345 由换行符而不是空格分隔。所以我尝试用我的函数替换换行符变成空格,就像这样:

Util.replaceStr(stringX, "\n", " ");

为了将溢出的字符串分配到数组字符串中,我检测了空白的索引,即

int index= sMessage.indexOf(" ");

然后循环播放

stringArray[i] = stringX.substring(0,index);
stringX=stringX.substring(index,stringX.length()-index);
index =stringX.indexOf(" ");

并将前 4 个值分配给它。然而,在我将换行符替换为空格后,会有双空格,前四个数组会变成这样

stringArray[0] = abc;
stringArray[1] = ;
stringArray[2] = 12345;
stringArray[3] = cde123;

如何通过跳过空白值来分配数组字符串? NETBEAN 中没有拆分功能。我知道java得到了。 =)

【问题讨论】:

  • 什么是netbean?在谷歌上找不到那个。你是说Netbeans吗?这是一个 IDE,一个应用程序,而不是一种语言......

标签: java replace split midp removing-whitespace


【解决方案1】:

编辑:这个例子应该适用于 Java 1.1 的目标

String text = "String text2 = text.replaceAll(\"[^\\p{Alpha} ]\", \"\");";
StringBuffer sb = new StringBuffer();
for(int i=0;i<text.length();i++) {
    char ch = text.charAt(i);
    if (Character.isLetter(ch) || Character.isWhitespace(ch))
        sb.append(ch);
}
String text2 = sb.toString();
System.out.println(text2);

打印

String text  textreplaceAllpAlpha

如果你想用空格分割你可以使用\s

String text = 
String[] words = text.split("\\s");

您似乎有多个空格(hyz 后面有一个空格)您可以使用+ 来表示一个或多个。

String text = "abc\n" +
        "12345 cde123\n" +
        "hyz \n" +
        "8755 3356\n";
String[] words = text.split("\\s+");
System.out.println(Arrays.toString(words));

打印

[abc, 12345, cde123, hyz, 8755, 3356]

【讨论】:

  • 空格被分割,但问题是会有双空格,当值为空格时我不想分配给数组字符串
  • 我添加了多个空格的解决方案。 ;)
  • 这里的关键字是Regular expression
  • 在netbean中,其实是没有split功能的
  • String.split 是 Java 的一个函数。您使用哪个 IDE 并不重要。十年前,Split 是在 Java 1.4 中添加的。如果您有一个较旧的 JVM(令人惊讶的是有些人这样做),这可以解释为什么您不能使用 split()。
【解决方案2】:

在java中有一个用于拆分的库函数,所以使用该函数进行拆分。您只需用空格替换新行并使用以下函数。

String[] stringArray  = stringX.split("\\s");

【讨论】:

  • NETBEAN 中没有拆分函数
  • Split 不是为特定 IDE 指定的函数,它是 java 中 String 类提供的方法。请彻底通读核心java。
【解决方案3】:

使用替换

将所有类型的空格转换为\n 后:您可以执行将\n\n 替换为\n 直到字符串不改变。这样你就可以确保没有双空格。

使用正则表达式

您还可以使用一些正则表达式模式之王来查找单词。比如:

\S+

应该足够了。您将获得所有非空白字符。如果您在字符串中找到前四个正则表达式,您将获得所需的内容。

【讨论】:

    【解决方案4】:

    只需围绕任意一组空格进行拆分(在正则表达式中使用“+”)。您不会以这种方式以由空格组成的组结束。

    String[] words = text.split("\\s+");
    

    【讨论】:

    • NETBEAN 中没有拆分函数
    • 请在询问之前在某处提及:)
    【解决方案5】:

    使用以下代码:

    String[] array = yourString.split("\\s");/* s is uncapitalized.*/
    

    \s 表示:空白字符,[ \t\n\x0b\r\f]的缩写

    您可以查看http://www.vogella.de/articles/JavaRegularExpressions/article.html了解更多信息。

    【讨论】:

    • NETBEAN 中没有拆分函数
    • JavaIDEA不同,你要先知道java api &amp; spec
    【解决方案6】:

    使用 Java 8 Stream,它变成了一个班轮。下面的代码根据点 . 拆分整个字符串,然后删除所有前面的零 0

    // "10.013.00400.0.1.001.100" ---> [10, 13, 400, 0, 1, 1, 100]
    String in = "10.013.00400.0.1.001.100"; 
    List<String> list = Arrays.stream(in.split("\\."))
                              .map(s -> s.replaceAll("^0+(?!$)", ""))
                              .collect(Collectors.toList());
    System.out.println(list);
    

    打印

    [10, 13, 400, 0, 1, 1, 100]
    

    【讨论】:

      猜你喜欢
      • 2021-09-12
      • 1970-01-01
      • 2013-04-26
      • 2021-12-23
      • 2015-06-17
      • 2021-05-31
      • 1970-01-01
      • 2020-12-02
      • 2016-11-08
      相关资源
      最近更新 更多