拆分字符串与空格和多个其他操作符号?

时间:2013-08-31 04:51:47

标签: java

我理解代码如

tokens = mystring.split(\\s);

将基于空格(或多个空格)拆分字符串,并在空格之间使用标记返回和数组。但是,我无法理解如何为拆分功能提供这些参数。我如何指定多个分隔符?

具体来说,我想分离一个String并将其与以下分隔符分开:

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

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

谢谢。如果这是重复,我道歉。 (关于拆分方法的大多数问题涉及一个特定问题,而不是关于它如何工作的一般解释)

4 个答案:

答案 0 :(得分: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"

我不确定“多个分隔符”的含义,但希望这可以提供一些有关您正在尝试做什么的见解。

答案 1 :(得分: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}");这是因为管道符号|代表或在正则表达式。如果您对我的回答有任何疑问,请随时在下面发表评论,我将进行编辑。

答案 2 :(得分:0)

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

答案 3 :(得分: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函数返回的列表。