使substring()方法忽略某些字符

时间:2019-10-19 15:46:50

标签: java

我想创建一个动画,该动画通过始终附加一个char来构建字符串。 像:'H', 'He', 'Hel', 'Hell', 'Hello' 为此,我已经创建了一个简单的方法:

Collection<String> states = new ArrayList<>();
    String text = "§aTest §bTest2";
    for (int i = 0; i < text.length(); i++) {
      states.add(text.substring(0, i));
    }

但是如您所见,该字符串还可以包含字符,这些字符以后对于用户不可见(如§a和§b)。使用上述方法将它们添加到动画状态看起来会很奇怪,因为有2个状态没有可见的变化,这会使动画出现毛刺。 例如,用户看到:'', '', 'T', 'Te', 'Tes', 'Test', 'Test ', 'Test ', 'Test ', 'Test T'

但是它们对于颜色很重要,并且可能无法删除,因为那样就不会有颜色。

那么在构建子字符串时又如何将这些字符忽略而不真正从字符串中删除呢?

1 个答案:

答案 0 :(得分:1)

如果您的转义序列始终是§后跟一个字符,则可以跳过以§作为其最后一个或第二个但最后一个字符的字符串:

for (int i = 0; i < text.length(); i++) {
   String sub = text.substring(0, i);
   if ( sub.charAt(sub.length() - 1) == '§' || (sub.length() > 1 && sub.charAt(sub.length() - 2) == '§' )
      continue;
   states.add();
}

这将无法在text的最后获取转义序列,但也应该很容易处理。