gpt4 book ai didi

java - 内存高效方法 字符串后缀

转载 作者:行者123 更新时间:2023-11-29 03:01:29 25 4
gpt4 key购买 nike

我的任务是创建一个内存高效方法,该方法接受一个由数字组成的String 并删除任何开头的零。

例如“001112”变成“1112”。

public static String hej (String v)
{
StringBuilder h = new StringBuilder(v);
while(true)
{
if (h.charAt(0) == '0')
h.deleteCharAt(0);
else
break;
}
return h.toString();
}

这是我的解决方案。当然它可以工作,但我的问题是,使用 StringBuilder 是否更有效,还是使用 String 本身更有效,例如 v.substring( )? 找不到太多关于什么更有效的信息。如果有人有某些文档的链接,请分享它们。

干杯

最佳答案

使用String.substring(int)方法会占用最少的内存

public static String hej(String input)
{
int i;
for(i = 0; i < input.length(); i++)
if(input.charAt(i) != '0')
break;
return input.substring(i);
}

来自 String 的源代码:

public String substring(int beginIndex) {
if (beginIndex < 0) {
throw new StringIndexOutOfBoundsException(beginIndex);
}
int subLen = value.length - beginIndex;
if (subLen < 0) {
throw new StringIndexOutOfBoundsException(subLen);
}
return (beginIndex == 0) ? this : new String(value, beginIndex, subLen);
}

这会调用 String(char[], int, int) 构造函数

public String(char value[], int offset, int count) {
if (offset < 0) {
throw new StringIndexOutOfBoundsException(offset);
}
if (count <= 0) {
if (count < 0) {
throw new StringIndexOutOfBoundsException(count);
}
if (offset <= value.length) {
this.value = "".value;
return;
}
}
// Note: offset or count might be near -1>>>1.
if (offset > value.length - count) {
throw new StringIndexOutOfBoundsException(offset + count);
}
this.value = Arrays.copyOfRange(value, offset, offset+count);
}

使用 StringBuilder 会占用一些内存来为输入的大小创建 StringBuilder,而使用 String.substring(int) 将只用尽所需的内存来表示修改后的输入

关于java - 内存高效方法 字符串后缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34597555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com