-1

我理解这样的代码

tokens = mystring.split(\\s);

将基于空格(或多个空格)拆分字符串,并返回和数组,其中包含空格之间的标记。但是,我很难理解如何为拆分函数提供这些参数。我将如何指定多个分隔符?

具体来说,我想分隔一个字符串并用以下分隔符分割它:

  • -
  • +
  • *
  • /
  • #
  • _(这是一个下划线)
  • ^(那是胡萝卜)

是的,如果您想知道我正在尝试使用堆栈实现后缀计算器。但这不是重点……重点是我无法理解如何提出拆分方法的参数。有没有很好的资源可以解释这一点?

谢谢你。如果这是重复的,我很抱歉。(关于拆分方法的大多数问题都涉及一个特定的问题,而不是对其工作原理的一般解释)

4

4 回答 4

1

查看Pattern的 Java 文档页面,您似乎可以使用此正则表达式按任何标点符号进行过滤:

\p{Punct}   Punctuation: One of !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

这是我运行来测试的一些示例代码:

public static void main(String[] args) {

    String[] vars = "a+b#c_d^e/f*g-h".split("\\p{Punct}");

    for (String var : vars) {
        System.out.println(var);
    }
}

输出:

a
b
c
d
e
f
g
h

所以要按标点符号或空格分割,只需使用.split("\\s|\\p{Punct}");这是因为管道符号 | 代表或在正则表达式中。如果您对我的回答有任何疑问,请随时在下面发表评论,我将进行编辑。

于 2013-08-31T05:46:42.307 回答
1

好吧,正如您可能在其他答案中读到的那样,该split方法采用正则表达式,这意味着String传入的解释将不同于正常的字符序列。您需要的一些分隔符被称为元字符,这意味着您必须通过在\\前面添加一个来转义它们。

例如,假设您有以下字符串:

String string = "this+is+a+string";

你想用+符号分割字符串。考虑到这+是一个元字符,你必须逃避它:

String[] split = string.split("\\+");

值将是:

split[0] = "this"
split[1] = "is"
split[2] = "a"
split[3] = "string"

我不确定您所说的“多个分隔符”是什么意思,但希望这可以为您尝试做的事情提供一些见解。

于 2013-08-31T05:13:31.543 回答
0

您不需要复杂的正则表达式来解析简单的数学表达式。StringTokenizer足以解析此类表达式。由于您要制作一个后缀计算器,您可能希望忽略空格并返回所有运算符,如*+等等。

这是split功能

public static List<String> split(String line, String delim, boolean includeDelim, boolean removeWhiteSpace) {
    List<String> tokens = new ArrayList<String>();
    StringTokenizer parser = new StringTokenizer(line, delim, includeDelim);

    while (parser.hasMoreTokens()) {
        String token = parser.nextToken();
        if (removeWhiteSpace) {
            token = token.replaceAll("\\s+", "");
        }
        tokens.add(token);
    }

    return tokens;
}

上述功能可让您指定是否要返回所有分隔符或分隔符之间的部分。您也可以选择忽略空白。

这是我的主要功能

public static void main(String aa[]) {
    final String DELIM = "+-*/^#_";
    Scanner in = new Scanner(System.in);

    while (true) {
        String line = in.nextLine();
        System.out.println(">" + split(line, DELIM, true, true));
    }
}

一些样本输出

12 ^ 36 - 15 + 17
>[12, ^, 36, -, 15, +, 17]

500*6/3+2
>[500, *, 6, /, 3, +, 2]

我正在恢复所有这些分隔符。您可以操作该split函数返回的列表。

于 2013-08-31T10:08:49.650 回答
0

您需要先了解正则表达式。对于基本使用,它非常简单:) 根据您的要求,您可以将其拆分为String[] split = mystr.split("[-+*/#_^]"); 方括号提供要匹配的字符列表,如果该方括号中的任何一个字符匹配,则它是匹配的。

于 2013-08-31T05:10:06.150 回答