我需要从String(test comment @georgios@gsabanti sefse @afa
)解析主题标签。
String text = "test comment @georgios@gsabanti sefse @afa";
String[] words = text.split(" ");
List<String> tags = new ArrayList<String>();
for ( final String word : words) {
if (word.substring(0, 1).equals("@")) {
tags.add(word);
}
}
最后我需要一个带有"@georgios" , "@gsabanti" , "@afa"
元素的数组。
但现在@georgios@gsabanti
显示为一个标签。
如何解决?
答案 0 :(得分:2)
这是一种简单的方法
String text = "test comment @georgios@gsabanti sefse @afa";
String patternst = "@[a-zA-Z0-9]*";
Pattern pattern = Pattern.compile(patternst);
Matcher matcher = pattern.matcher(text);
List<String> tags = new ArrayList<String>();
while (matcher.find()) {
tags.add(matcher.group(0));
}
我希望它对您有用:)
答案 1 :(得分:2)
+1正则表达式:
Matcher matcher = Pattern.compile("(@[^@\\s]*)")
.matcher("test comment @georgios@gsabanti sefse @afa");
List<String> tags = new ArrayList<>();
while (matcher.find()) {
tags.add(matcher.group());
}
System.out.println(tags);
答案 2 :(得分:1)
使用Arraylist而不是数组:
String text = "test comment @georgios@gsabanti sefse @afa";
ArrayList<String> hashTags = new ArrayList()<>;
char[] c = text.toCharArray();
for(int i=0;i<c.length;i++) {
if(c[i]=='@') {
String hash = "";
for(int j=i+1;j<c.length;j++) {
if(c[j]==' ' || c[j]=='@') {
hashTags.add(hash);
hash="";
break;
}
hash+=c[j];
}
}
}
答案 3 :(得分:1)
String text = "test comment @georgios@gsabanti sefse @afa";
String[] words = text.split("(?=@)|\\s+")
List<String> tags = new ArrayList<String>();
for ( final String word : words) {
if (!word.isEmpty() && word.startsWith("@")) {
tags.add(word);
}
}
答案 4 :(得分:1)
您可以将字符串拆分为“”或“@”并保留分隔符并过滤掉以“@”开头的分隔符,如下所示:
public static void main(String[] args){
String text = "test comment @georgios@gsabanti sefse @afa";
String[] tags = Stream.of(text.split("(?=@)|(?= )")).filter(e->e.startsWith("@")).toArray(String[]::new);
System.out.println(Arrays.toString(tags));
}