如何从Java中的字符串中删除某些字符

时间:2014-09-13 23:27:55

标签: java string api minecraft bukkit

所以我正在尝试为Minecraft制作Bukkit API插件,我遇到了Strings的这个问题,我无法删除字符串的某个部分,如果你能提供帮助,我将不胜感激。

所以当我使用代码行时会出现问题:iter.next()。toString();

该行代码打印输出:“ItemStack {DIAMOND_SWORD x 1}”

如果有什么东西,我如何删除字符串的“x 1”部分并保留其余部分?

以下列出了我尝试的事项:

  • SUBSTRING
  • 替换
  • 分割

3 个答案:

答案 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}");