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中工作,除了去擦洗,所以我的代码在这两种语言中都工作谢谢!这一条对我很有用:你发布的第二个结果就是我想要的