解析符号之间的主题标签

时间:2018-01-22 10:41:55

标签: java android

我需要从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显示为一个标签。

如何解决?

5 个答案:

答案 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));
}