Интерпретация переменных String Java

Строковое построение на 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 + "?"; 

Или, используя 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("?"); -  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("?"); 

Жаль, что я чего-то не хватает. У нас есть лучший способ. Что-то вроде:

Вместо:

 urlString += "u1=" + u1 + ";u2=" + u2 + ";u3=" + u3 + ";u4=" + u4 + ";"; 

делать:

 urlString += Interpolator("u1=%s;u2=%s;u3=%s;u4=%s;", u1, u2, u3, u4); 

или:

 urlStringBuilder.append(Interpolator("u1=%s;u2=%s;u3=%s;u4=%s;", u1, u2, u3, u4)); 

Если вы используете Java 5 или выше, вы можете использовать String.format :

 urlString += String.format("u1=%s;u2=%s;u3=%s;u4=%s;", u1, u2, u3, u4); 

Подробнее см. В разделе Formatter .

Обратите внимание, что в Java нет переменной-интерполяции. Переменная-интерполяция – это переменная подстановка со значением внутри строки. Пример в Ruby:

 #!/usr/bin/ruby age = 34 name = "William" puts "#{name} is #{age} years old" 

Интерпретатор Ruby автоматически заменяет переменные своими значениями внутри строки. Тот факт, что мы будем делать интерполяцию, намекает на символы сигил. В 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); } } 

В Java мы создаем новую строку, используя метод String.format (). Результат тот же, но методы разные.

См. http://en.wikipedia.org/wiki/Variable_interpolation

Просто добавьте, что есть также java.text.MessageFormat с возможностью иметь числовые индексы аргументов.

Добавление 1-го примера из документации

 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); 

Результат:

 At 12:30 PM on Jul 3, 2053, there was a disturbance in the Force on planet 7. 

String.format() на помощь !!

Вы можете использовать Kotlin, Super (sede of) Java для JVM, он имеет хороший способ интерполяции строк, таких как ES5, Ruby и Python.

 class Client(val firstName: String, val lastName: String) { val fullName = "$firstName $lastName" } 
Interesting Posts
Давайте будем гением компьютера.