原始问题,但是如何格式化这样的字符串:
“ {2}的步骤{1}”
通过使用Java替换变量?在C#中很容易。
原始问题,但是如何格式化这样的字符串:
“ {2}的步骤{1}”
通过使用Java替换变量?在C#中很容易。
Answers:
除了String.format之外,还请看一下java.text.MessageFormat
。格式不那么简洁,更接近于您提供的C#示例,您也可以将其用于解析。
例如:
int someNumber = 42;
String someString = "foobar";
Object[] args = {new Long(someNumber), someString};
MessageFormat fmt = new MessageFormat("String is \"{1}\", number is {0}.");
System.out.println(fmt.format(args));
一个更好的示例利用了Java 1.5中的varargs和自动装箱改进,并将以上内容变成了一种形式:
MessageFormat.format("String is \"{1}\", number is {0}.", 42, "foobar");
MessageFormat
使用choice修饰符进行国际化复数会更好一些。要指定在变量为1且其他情况为复数时正确使用单数形式的消息,可以执行以下操作:
String formatString = "there were {0} {0,choice,0#objects|1#object|1<objects}";
MessageFormat fmt = new MessageFormat(formatString);
fmt.format(new Object[] { new Long(numberOfObjects) });
MessageFormat.format("Number {0}", 1234));
根据默认语言环境,可以生成以下代码Number 1,234
代替Number 1234
。
{0} it ll take firstname
,when {1} then lastname
,的Class对象,就像这样。有可能那样{0,choice,0.getFirstName()}
吗?
看一下String.format。但是请注意,它需要使用类似于C的printf系列函数的格式说明符-例如:
String.format("Hello %s, %d", "world", 42);
将返回“ Hello world,42”。在了解格式说明符时,您可能会发现这很有用。安迪·托马斯·克拉默(Andy Thomas-Cramer)很好,可以在下面的评论中保留此链接,该评论似乎指向官方规范。最常用的是:
这与C#完全不同,后者使用带有可选格式说明符的位置引用。这意味着您不能执行以下操作:
String.format("The {0} is repeated again: {0}", "word");
... 而无需实际重复传递给printf / format的参数。(请参阅下面的Scrum Meister的评论)
如果只想直接打印结果,则可以按照自己的喜好找到System.out.printf(PrintStream.printf)。
String.format
也可以采用数字位置:String.format("%2$s %1$s", "foo", "bar");
将输出bar foo
如果选择不使用String.format,则另一个选项是+二进制运算符
String str = "Step " + a + " of " + b;
这相当于
new StringBuilder("Step ").append(String.valueOf(1)).append(" of ").append(String.valueOf(2));
您选择使用哪种。StringBuilder更快,但是速度差异很小。我更喜欢使用+
运算符(执行a StringBuilder.append(String.valueOf(X)))
并发现它更易于阅读。
public class StringFormat {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("================================");
for(int i=0;i<3;i++){
String s1=sc.next();
int x=sc.nextInt();
System.out.println(String.format("%-15s%03d",s1,x));
}
System.out.println("================================");
}
}
仓库“ ================================
ved15space123 ved15space123 ved15space123” ============ =====================
Java解决方案
“-”用于左缩进
“ 15”使字符串的最小长度为15
这个解决方案对我有用。我需要为REST客户端动态创建网址,因此我创建了此方法,因此您只需要像这样传递restURL
/customer/{0}/user/{1}/order
并根据需要添加任意数量的参数:
public String createURL (String restURL, Object ... params) {
return new MessageFormat(restURL).format(params);
}
您只需要这样调用此方法:
createURL("/customer/{0}/user/{1}/order", 123, 321);
输出
“ / customer / 123 / user / 321 / order”
我写了这个函数,它做对了。插入以$
相同名称的变量值开头的单词。
private static String interpol1(String x){
Field[] ffield = Main.class.getDeclaredFields();
String[] test = x.split(" ") ;
for (String v : test ) {
for ( Field n: ffield ) {
if(v.startsWith("$") && ( n.getName().equals(v.substring(1)) )){
try {
x = x.replace("$" + v.substring(1), String.valueOf( n.get(null)));
}catch (Exception e){
System.out.println("");
}
}
}
}
return x;
}