所以我正在尝试为Minecraft制作Bukkit API插件,我遇到了Strings的这个问题,我无法删除字符串的某个部分,如果你能提供帮助,我将不胜感激。
所以当我使用代码行时会出现问题:iter.next()。toString();
该行代码打印输出:“ItemStack {DIAMOND_SWORD x 1}”
如果有什么东西,我如何删除字符串的“x 1”部分并保留其余部分?
以下列出了我尝试的事项:
答案 0 :(得分:1)
您似乎只想用[space(s)]x[space(s)][digit(s)]}
替换}
。如果是这种情况,那么您可以尝试使用
replaceAll("\\s+x\\s+\\d+\\}", "}");
replaceAll
使用regular expression(正则表达式)作为第一个参数。在正则表达式\s
(写为"\\s"
)表示任何空格,+
表示之前描述的元素的一个或多个出现,这意味着"\\s+"
表示一个或多个空格。现在\d
代表数字(范围0-9
中的字符)。另外,{
和}
是特殊字符,因此为了逃避它们,我需要在\\
之前添加}
。
更改要求后更新:
replaceAll("ItemStack\\{(\\w+)\\s+x\\s+\\d+\\}", "{$1}");
\\w
表示范围a-z
A-Z
0-9
和_
中的任何字符。我用括号括起\\w+
来创建group,它会存储DIAMOND_SWORD
,因此我可以通过$[groupID]
在替换部分中使用匹配。由于这是我们的第一个群组,因此我们可以使用1
代替{$1}
来替换整个
ItemStack{DIAMOND_SWORD x 1}
只有{DIAMOND_SWORD}
答案 1 :(得分:0)
想一想:
当你调用iter.next()并更改返回的字符串时,你就会松开列表中字符串的引用。
这与字符串的行为有关:如果更改字符串,实际上是对新字符串对象的引用。
结合列表用法你应该试试这个,即:
iter.set(iter.next().substring(int i));
这需要将您想要的对象放入列表...
答案 2 :(得分:0)
假设您要删除除第一个"之外的所有字词"在大括号内:
str = str.replaceAll("(\\{\\w+)[^}]+\\}","$1}");