gpt4 book ai didi

Java连接以构建字符串或格式

转载 作者:搜寻专家 更新时间:2023-10-30 21:20:55 25 4
gpt4 key购买 nike

我目前正在使用 java 编写 MUD(基于文本的游戏)。 MUD 的主要方面之一是格式化字符串并将其发送回用户。如何最好地实现这一目标?

假设我想发送以下字符串:

你对某人说“你好!” - 其中“某人”、“说”和“你好!”都是变量。哪种性能最好?

“你”+动词+“到”+用户+“\”“+文本+”\“”

String.format("You %1$s to %2$s\"%3$s\"", verb, user, text)

还是其他一些选择?

我不确定最终哪个会更容易使用(这很重要,因为它将无处不在),但我现在正在考虑它,因为与 + 连接会得到一个与一些较大的线条有点混淆。我觉得在这种情况下使用 StringBuilder 只会降低它的可读性。

这里有什么建议吗?

最佳答案

如果字符串是使用单个连接表达式构建的;例如

String s = "You " + verb + " to " + user + " \"" + text + "\"";

那么这或多或少等同于更冗长的:

StringBuilder sb = new StringBuilder();
sb.append("You");
sb.append(verb);
sb.append(" to ");
sb.append(user);
sb.append(" \"");
sb.append(text );
sb.append('"');
String s = sb.toString();

事实上,一个经典的Java编译器会将前者编译成后者……差不多。在 Java 9 中,他们实现了 JEP 280它用单个 invokedynamic 字节码替换字节码中的构造函数和方法调用序列。然后运行时系统优化这个1

当您开始创建中间字符串或使用 += 等构建字符串时,会出现效率问题。那时,StringBuilder 变得更加高效,因为您减少了创建然后丢弃的中间字符串的数量。

现在,当您使用 String.format() 时,它应该在后台使用 StringBuilder。但是,format 还必须在您每次调用时解析格式字符串,如果您以最佳方式构建字符串,则不会产生这种开销。


话虽如此,我的建议是以最易读的方式编写代码。如果分析 告诉您这是一个真正的性能问题,那么只需担心构建字符串的最有效方法。 (现在,您正在花时间思考解决性能问题的方法,但结果可能是微不足道或无关紧要的。)

另一个答案提到使用格式字符串可以简化对多种语言的支持。这是事实,尽管在复数、性别等方面您可以做的事情是有限的。


1 - 因此,对于 Java 9 或更高版本,根据上述示例进行的手动优化实际上可能会产生负面后果。但无论何时进行微优化,这都是一种风险。

关于Java连接以构建字符串或格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7775394/

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