two*_*o13 11 java string-concatenation string-formatting mud
我正在使用java编写MUD(基于文本的游戏).MUD的一个主要方面是格式化字符串并将其发送回用户.如何最好地完成这项工作?
说我想发送以下字符串:
你对别人说"你好!" - "有人","说"和"你好!" 都是变数.哪个表现最好?
"You " + verb + " to " + user + " \"" + text + "\""
要么
String.format("You %1$s to %2$s \"%3$s\"", verb, user, text)
还是其他一些选择?
我不确定最终哪个更容易使用(这很重要,因为它将无处不在),但我现在正在考虑这个问题,因为与+的连接变得有点混乱一些更大的线.我觉得在这种情况下使用StringBuilder只会让它更具可读性.
这里有什么建议吗?
Ste*_*n C 23
如果使用单个串联表达式构建字符串; 例如
String s = "You " + verb + " to " + user + " \"" + text + "\"";
Run Code Online (Sandbox Code Playgroud)
那么这或多或少等同于更长的啰嗦:
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();
Run Code Online (Sandbox Code Playgroud)
(实际上,Java编译器会将前者编译成后者......差不多.)
当您开始创建中间字符串或使用+=等构建字符串时,会出现效率问题.此时,StringBuilder变得更有效率,因为您减少了创建然后丢弃的中间字符串的数量.
现在当你使用时String.format(),应该使用StringBuilder引擎盖下.但是,format每次进行调用时,还必须解析格式String,如果您以最佳方式构建字符串,那么这是您没有的开销.
话虽如此,我的建议是以最具可读性的方式编写代码.如果分析告诉您这是一个真正的性能问题,那么只关心构建字符串的最有效方法.(现在,您正在花时间思考解决性能问题的方法,这可能会变得微不足道或无关紧要.)
另一个答案提到使用格式字符串可以简化对多种语言的支持.这是事实,尽管对于复数,性别等事物你可以做些什么是有限的.
| 归档时间: |
|
| 查看次数: |
37233 次 |
| 最近记录: |