我理解代码如
tokens = mystring.split(\\s);
将基于空格(或多个空格)拆分字符串,并在空格之间使用标记返回和数组。但是,我无法理解如何为拆分功能提供这些参数。我如何指定多个分隔符?
具体来说,我想分离一个String并将其与以下分隔符分开:
是的,如果您想知道我正在尝试使用堆栈实现后缀计算器。但这不是重点......重点是我无法理解如何提出拆分方法的参数。有没有很好的资源可以解释这个?
谢谢。如果这是重复,我道歉。 (关于拆分方法的大多数问题涉及一个特定问题,而不是关于它如何工作的一般解释)
答案 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
函数返回的列表。