cmc*_*loh 154 java string-interpolation
Java中的字符串构建使我感到困惑.我喜欢这样的事情:
url += "u1=" + u1 + ";u2=" + u2 + ";u3=" + u3 + ";u4=" + u4 + ";";
url += "x=" + u1 + ";y=" + u2 + ";z=" + u3 + ";da1=" + u4 + ";";
url += "qty=1;cost=" + orderTotal + ";ord=" + orderId + "?";
Run Code Online (Sandbox Code Playgroud)
或者,使用StringBuilder,如下所示:
url.append("u1=");
url.append(u1);
url.append(";u2=");
url.append(u2);
url.append(";u3=");
url.append(u3);
url.append(";u4=");
url.append(u4);
url.append(";");
url.append("x=");
url.append(u1);
url.append(";y=");
url.append(u2);
url.append(";z=");
url.append(u3);
url.append(";da1=");
url.append(u4);
url.append(";");
url.append("qty=1;");
url.append("cost=");
url.append(orderTotal);
url.append(";ord=");
url.append(orderId);
url.append("?");
Run Code Online (Sandbox Code Playgroud)
我错过了一些东西.GOT是一种更好的方式.就像是:
代替:
urlString += "u1=" + u1 + ";u2=" + u2 + ";u3=" + u3 + ";u4=" + u4 + ";";
Run Code Online (Sandbox Code Playgroud)
做:
urlString += Interpolator("u1=%s;u2=%s;u3=%s;u4=%s;", u1, u2, u3, u4);
Run Code Online (Sandbox Code Playgroud)
要么:
urlStringBuilder.append(Interpolator("u1=%s;u2=%s;u3=%s;u4=%s;", u1, u2, u3, u4));
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 283
如果您使用的是Java 5或更高版本,则可以使用String.format:
urlString += String.format("u1=%s;u2=%s;u3=%s;u4=%s;", u1, u2, u3, u4);
Run Code Online (Sandbox Code Playgroud)
详情Formatter请见.
Jan*_*nar 76
请注意,Java中没有变量插值.变量插值是变量替换,其值在字符串内.Ruby中的一个例子:
#!/usr/bin/ruby
age = 34
name = "William"
puts "#{name} is #{age} years old"
Run Code Online (Sandbox Code Playgroud)
Ruby解释器自动用字符串中的值替换变量.事实上,我们要进行插值是由sigil字符暗示的.在Ruby中,它是#{}.在Perl中,它可以是$,%或@.Java只会打印这样的字符,它不会扩展它们.
Java不支持变量插值.而不是这个,我们有字符串格式.
package com.zetcode;
public class StringFormatting
{
public static void main(String[] args)
{
int age = 34;
String name = "William";
String output = String.format("%s is %d years old.", name, age);
System.out.println(output);
}
}
Run Code Online (Sandbox Code Playgroud)
在Java中,我们使用String.format()方法构建一个新字符串.结果是一样的,但方法不同.
见http://en.wikipedia.org/wiki/Variable_interpolation
编辑截至2019年,JEP 326:Raw String Literals提到字符串插值可能会在将来添加到该语言中.
原始字符串文字不直接支持字符串插值.可以在未来的JEP中考虑插值.
Jim*_*ane 29
只是补充说,还有java.text.MessageFormat,它具有数字参数索引的好处.
附加文档中的第一个示例
int planet = 7;
String event = "a disturbance in the Force";
String result = MessageFormat.format(
"At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.",
planet, new Date(), event);
Run Code Online (Sandbox Code Playgroud)
结果:
At 12:30 PM on Jul 3, 2053, there was a disturbance in the Force on planet 7.
Run Code Online (Sandbox Code Playgroud)
您可以使用Kotlin,JVM的Super(cede of)Java,它有一种很好的插入字符串的方式,如ES5,Ruby和Python.
class Client(val firstName: String, val lastName: String) {
val fullName = "$firstName $lastName"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
130709 次 |
| 最近记录: |