如何使用正则表达式将字符串拆分为字符?

4

我需要学习正则表达式,但现在没有时间去弄清楚。-- 因此,我试图利用社区的能力。

我有一个包含可接受的1个字符注释变量列表的字符串。

String comments = "#;";

And I want:

String[] parsedComments = {"#", ";"};

什么正则表达式字符串可以解决我的问题?
String[] parsedComments = comments.split(/*  "???"  */);
6个回答

12

我同意使用正则表达式有些过头了,但是你的例子给出的是一个char []结果而不是一个String[]结果。 - Vinay Sajip
没错。但是字符数组是一种更好的数据结构,用于存储 - 嗯 - 一组字符,除非你确实由于某些深奥的原因需要一个字符串数组。但是任何本地代码都可以更新为使用更直观的 char[] 类型来运行。 - soulmerge

7

这应该可以解决问题,除了其他奇怪的技巧:

String[] parsedComments = comments.split("(?!^)");

这不是正则表达式的工作,最好的方法是遍历字符串并将每个1字符子串构建成一个数组。


不太对 - 我得到了一个结果为 ["", "#", ";"] 的结果,这可以通过使用 "" 作为 split 的参数来获得。 - Vinay Sajip
哦。我正在测试Perl中的正则表达式,但它似乎不起作用。编辑后可能会抑制空字符串。 - chaos
1
"(?<!^)" 单独使用同样有效。事实上,它甚至不必是一个反向预查:"(?!^)" 也可以。 - Alan Moore

5

首先,为什么需要将它们拆分成数组?字符串几乎有完全相同的方法可以获取索引处的字符,并具有几乎相同的性能。

但是,回答你的问题:

string.split("");

这将在结果数组的第一个位置提供一个额外的空字符串。

谢谢。看起来我试图让它变得比必要的复杂。 - Nate

3

我尝试将这个作为评论添加到“Daniel”和“Lazarus”的下面,但是我还没有足够的声望...除非我误解了您的意思,您是说要使用索引访问原始字符串。在Java中无法这样做。

String foo = "abcde";
String bee = foo[1]; // not valid

如果我误解了您,我道歉。如果没有,我想要为后人澄清一下。:-)

你是对的:Java中的字符串不仅仅是字符数组。你可以通过索引访问一个字符,但是需要使用charAt()方法。(如果要允许代理对,则使用codePointAt()方法。) - Alan Moore

2

在我的原始答案中,我误解了您的意思。您不需要使用正则表达式(Regex)。正则表达式用于查找模式,而您只是想要分割字符串。您可以使用空字符串,但这也会返回一个空字符串以及字符。

只需通过索引访问即可。


1

只需使用 comments[0],comments[1]... comments[n] 访问字符串索引即可。


1
不是Java;请参考cjstehno的答案。 - Alan Moore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接