删除O(1)中字符串的第一个字符

布里斯

如何在Java中表示一个字符串,以便删除字符串的第一个字符需要O(1)时间?

这个问题:关于字符串字符删除,讨论了在Java中使用子字符串删除字符串的第一个字符。但是,正如Java 7此处所发现的那样,子字符串实现现在以O(字符串的长度)运行。如何使用Java删除O(1)中的第一个字符?

我只是想要一个替代方案,如果可能的话,使用其他类似的类(如StringBuffer,StringBuilder等)来处理字符串和字符。或通过其他任何方式,肯定必须有一种方法可以删除O(1)中单词的第一个字符。

卢克·梅拉亚

如果String没有先复制a的字符,就无法获得它们,这需要O(n)的时间,因为它必须横穿整个字符串以进行复制...除非您使用反射。

现在,您要讨论替换字符串中的第一个字母,以及可替换地替换字符串中每个单词的第一个字母。如果要替换每个单词的第一个字母,则必须横切整个字符串,即O(n)时间-别无选择。

如果您只想替换第一个字母,则可以使用反射,但我不建议您实际使用,而是使用.substring(String)

您要寻找的方法:

/**
 * Replaces the first letter in a {@code String} in O(1) time.
 *
 * This uses reflection to change the values and will modify the
 * {@code String}s values. 
 *
 * @param str the {@code String} to modify.
 * @param letter the new first letter of the {@code String}.
 * @return {@code str}
 */
public static String replaceFirstLetter(String str, char letter) {
    if (str == null) {
        throw new NullPointerException("str cannot be null");
    }

    if (str.length() == 0) {
        throw new IllegalArgumentException("String cannot be empty");
    }

    try {
        Field value
                = str.getClass().getDeclaredField("value");

        value.setAccessible(true);

        Field modifiersField = Field.class.getDeclaredField("modifiers");
        modifiersField.setAccessible(true);
        modifiersField.setInt(value, value.getModifiers() & ~Modifier.FINAL);

        char[] values = (char[]) value.get(str);
        values[0] = letter;
        value.set(str, values);

    } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException ex) {
        ex.printStackTrace();
        //This should never happen
    }

    return str;
}

请注意,此方法将修改String您传入的内容,因此这会破坏类的不变规则,因此String不应在生产代码中使用。同样,与使用此方法相比,仅横向穿过弦可能会更快。

public static void main(String[] args) {
    String s = "Hello";
    replaceFirstLetter(s, 'Y');
    System.out.println(s);

    System.out.println(replaceFirstLetter("Hello", 'G'));
}

这很好地证明了这一点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

R从字符串中删除第一个字符

来自分类Dev

从字符串中删除第一个字符

来自分类Dev

从字符串中删除第一个字符

来自分类Dev

从字符串中删除第一个字符

来自分类Dev

在Oracle Server中删除字符串的第一个字符

来自分类Dev

从字符串Django模板中删除第一个字符

来自分类Dev

从字符串Django模板中删除第一个字符

来自分类Dev

在 LotusScript 中删除字符串的第一个字符

来自分类Dev

如果每个字符串中的第一个字符相同,则从数组中的每个字符串中删除第一个字符

来自分类Dev

Bash删除字符串中的第一个和最后一个字符

来自分类Dev

从字符串中删除第一个和最后一个字符

来自分类Dev

Bash删除字符串中的第一个和最后一个字符

来自分类Dev

从字符串数组android studio中删除第一个字符串

来自分类Dev

如何删除字符串的第一个字符[python]

来自分类Dev

Grails删除字符串的第一个字符

来自分类Dev

反转字符串并删除第一个字符

来自分类Dev

从第二个字符串中删除出现在第一个字符串中的字符

来自分类Dev

从第二个字符串中删除出现在第一个字符串中的字符

来自分类Dev

从八度音阶中的字符串中删除第一个字符

来自分类Dev

仅当字符串中的第一个或最后一个字符时,才从字符串中删除该字符。

来自分类Dev

仅当字符串中的第一个或最后一个字符时,才从字符串中删除该字符。

来自分类Dev

在MySQL中替换字符串中的第一个字符

来自分类Dev

python3反复从字符串中删除第一个字符

来自分类Dev

使用C#从字符串中删除第一个字符

来自分类Dev

从字符串中删除第一个字符(如果为0)

来自分类Dev

用R中的条件删除字符串的第一个字符

来自分类Dev

删除字符串中的第一个字符会留下空白

来自分类Dev

在作为字母的字符串中查找第一个字符

来自分类Dev

Pinvoke字符串中仅传递第一个字符

Related 相关文章

  1. 1

    R从字符串中删除第一个字符

  2. 2

    从字符串中删除第一个字符

  3. 3

    从字符串中删除第一个字符

  4. 4

    从字符串中删除第一个字符

  5. 5

    在Oracle Server中删除字符串的第一个字符

  6. 6

    从字符串Django模板中删除第一个字符

  7. 7

    从字符串Django模板中删除第一个字符

  8. 8

    在 LotusScript 中删除字符串的第一个字符

  9. 9

    如果每个字符串中的第一个字符相同,则从数组中的每个字符串中删除第一个字符

  10. 10

    Bash删除字符串中的第一个和最后一个字符

  11. 11

    从字符串中删除第一个和最后一个字符

  12. 12

    Bash删除字符串中的第一个和最后一个字符

  13. 13

    从字符串数组android studio中删除第一个字符串

  14. 14

    如何删除字符串的第一个字符[python]

  15. 15

    Grails删除字符串的第一个字符

  16. 16

    反转字符串并删除第一个字符

  17. 17

    从第二个字符串中删除出现在第一个字符串中的字符

  18. 18

    从第二个字符串中删除出现在第一个字符串中的字符

  19. 19

    从八度音阶中的字符串中删除第一个字符

  20. 20

    仅当字符串中的第一个或最后一个字符时,才从字符串中删除该字符。

  21. 21

    仅当字符串中的第一个或最后一个字符时,才从字符串中删除该字符。

  22. 22

    在MySQL中替换字符串中的第一个字符

  23. 23

    python3反复从字符串中删除第一个字符

  24. 24

    使用C#从字符串中删除第一个字符

  25. 25

    从字符串中删除第一个字符(如果为0)

  26. 26

    用R中的条件删除字符串的第一个字符

  27. 27

    删除字符串中的第一个字符会留下空白

  28. 28

    在作为字母的字符串中查找第一个字符

  29. 29

    Pinvoke字符串中仅传递第一个字符

热门标签

归档