Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的正则表达式-解析字符串数组_Java_Arrays_Regex_String_Java 8 - Fatal编程技术网

Java中的正则表达式-解析字符串数组

Java中的正则表达式-解析字符串数组,java,arrays,regex,string,java-8,Java,Arrays,Regex,String,Java 8,我有一个如下的字符串数组: String tweetString = ExudeData.getInstance().filterStoppingsKeepDuplicates(tweets.text); // get array of words and split String[] wordArray = tweetString.split(" "); String sanitizedString = wordArray.replaceAll("\\s+", " "

我有一个如下的字符串数组:

    String tweetString = ExudeData.getInstance().filterStoppingsKeepDuplicates(tweets.text);
    // get array of words and split
    String[] wordArray = tweetString.split(" ");
String sanitizedString = wordArray.replaceAll("\\s+", " ").replaceAll(",+", ",");
分割阵列后,打印以下内容:

System.out.println(Arrays.toString(wordArray));
我得到的结果是:

[new, single, fallin, dropping, days, artwork, hueshq, production, iseedaviddrums, amp, bigearl7, mix, reallygoldsmith, https, , , t, co, dk5xl4cicm, https, , , t, co, rvqkum0dk7]
我想要的是在使用上述拆分方法后删除所有逗号、https和单个字母(如“t”)的实例。所以我想以这个结束:

[new, single, fallin, dropping, days, artwork, hueshq, production, iseedaviddrums, amp, bigearl7, mix, reallygoldsmith, co, dk5xl4cicm, https, co, rvqkum0dk7]
我试过这样做:

    String tweetString = ExudeData.getInstance().filterStoppingsKeepDuplicates(tweets.text);
    // get array of words and split
    String[] wordArray = tweetString.split(" ");
String sanitizedString = wordArray.replaceAll("\\s+", " ").replaceAll(",+", ",");

但这只是给了我相同的初始输出,没有任何变化。有什么想法吗?

如果您使用的是Java 8

String[] result = Arrays.stream(tweetString.split("\\s+"))
            .filter(s -> !s.isEmpty())
            .toArray(String[]::new);
我想要的是删除所有逗号、https和单个字母(如“t”)的实例

在这种情况下,您可以创建多个过滤器,如@Andronicus do或带有匹配项的过滤器和一些正则表达式,如:

String[] result = Arrays.stream(tweetString.split("\\s+"))
            .filter(s -> !s.matches("https|.|\\s+"))
            .toArray(String[]::new);

如果您使用的是Java8

String[] result = Arrays.stream(tweetString.split("\\s+"))
            .filter(s -> !s.isEmpty())
            .toArray(String[]::new);
我想要的是删除所有逗号、https和单个字母(如“t”)的实例

在这种情况下,您可以创建多个过滤器,如@Andronicus do或带有匹配项的过滤器和一些正则表达式,如:

String[] result = Arrays.stream(tweetString.split("\\s+"))
            .filter(s -> !s.matches("https|.|\\s+"))
            .toArray(String[]::new);

您可以这样做:

String[] filtered = Arrays
    .stream(tweetString.split("[ ,]"))
    .filter(str -> str.length() > 1)
    .filter(str -> !str.equals("http"))

您可以这样做:

String[] filtered = Arrays
    .stream(tweetString.split("[ ,]"))
    .filter(str -> str.length() > 1)
    .filter(str -> !str.equals("http"))

根据我的评论,这里是快速解决方案。使用所有关键字增强正则表达式

 private static void replaceFromRegex(final String text ) {
    String result = text.replaceAll("https($|\\s)| (?<!\\S)[^ ](?!\\S)","");
      System.out.println(result);
  }

注意:这只是一个示例,你必须加强ReGEX来考虑起始词,例如用HTTPS开始的字符串,然后是空间等等。使用所有关键字增强正则表达式

 private static void replaceFromRegex(final String text ) {
    String result = text.replaceAll("https($|\\s)| (?<!\\S)[^ ](?!\\S)","");
      System.out.println(result);
  }

注意:这只是一个示例,你必须加强ReGEX来考虑起始词E.G,从HTTPS开始,然后空间,等等。请注意,split本身采用正则表达式。您可能想从这个开始。@Mena-是的,我想在使用split方法后解析出上面提到的字符串,如果您阅读了我的实际问题,您的输出数组中似乎没有实际的逗号,只有空字符串。此外,wordArray是一个数组,所以你不可能在它上面使用replaceAll——它不会编译。哦,很好的观点,谢谢你指出这些@如果您提供原始输入,则更容易回答。请注意,split本身采用正则表达式。您可能想从这个开始。@Mena-是的,我想在使用split方法后解析出上面提到的字符串,如果您阅读了我的实际问题,您的输出数组中似乎没有实际的逗号,只有空字符串。此外,wordArray是一个数组,所以你不可能在它上面使用replaceAll——它不会编译。哦,很好的观点,谢谢你指出这些@我正在使用Java11@Hana在Java8中工作的东西在Java11中工作,除了去擦洗,所以我的代码在这两种语言中都工作谢谢!这一条对我有用:你发布的第二个结果是我在寻找的我在使用Java11@Hana在Java8中工作的东西在Java11中工作,除了去擦洗,所以我的代码在这两种语言中都工作谢谢!这一条对我很有用:你发布的第二个结果就是我想要的