【问题标题】:Parse String without removing the token [closed]在不删除令牌的情况下解析字符串 [关闭]
【发布时间】:2015-02-09 18:18:52
【问题描述】:

我有一个要在 java 中解析的字符串。我的输入字符串是:#hello#adam@how@are@you。 我希望输出是:

#hello

#adam

@how

@are

@you

我已尝试使用以下代码,但它没有提供所需的输出。

 StringTokenizer st = new StringTokenizer(txt,"#,");
    ArrayList<String> str =new ArrayList<String>();
    while (st.hasMoreElements()) {
        str.add(st.nextElement().toString());
    }

【问题讨论】:

  • 这是一个(粗略的)需求草图——这不是一个问题。如果问题是“我该怎么做”,那对 SO 来说太宽泛了。你应该试一试,如果这样做你想出了一个特定问题(我该如何做这一步,或者“我做了X并且预期A但看到B”),你可以问这个问题(当然,假设您首先搜索以确保它尚未被回答)。
  • 你试过一些代码吗?把那个给我们……那么也许我们可以帮忙。
  • 是的。 ..我已经添加了代码。
  • 所以,现在您有了一个粗略的需求草图、一些示例输入和一些“没有给出所需输出”的代码。它给出的是什么输出? (提示:它没有给出任何输出,因为你没有输出任何东西。)中间步骤中事物的值是什么?如果您缩小问题的范围,它不仅可以帮助我们回答它——它还可以帮助您在没有我们帮助的情况下回答它。例如,循环发生了多少次? str 的价值观是什么?你希望他们成为什么样的人,你怎样才能让他们到达那里? (提示:查看 StringTokenizer 中的returnDelims

标签: java regex parsing delimiter


【解决方案1】:

您可以使用正则表达式轻松解决此问题。

仅考虑您提供的信息,这可能是一个可能的解决方案。

public class Parsing {
    public static void main (final String[] args) {

        final String regexp = "([@#][a-z]+)";
        final Pattern pattern = Pattern.compile(regexp);
        final String input = "#hello#adam@how@are@you";

        final Matcher matcher = pattern.matcher(input);
        while (matcher.find()) {
            System.out.println(matcher.group());
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 2019-11-20
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 2018-11-10
    相关资源
    最近更新 更多