Эквивалент Sprintf в Java

Строки - это неизменяемые jdk типы. Вы не можете их изменять, только openjdk возвращайте новые экземпляры string строк.

Из-за этого форматирование j2se с помощью метода экземпляра formating не имеет особого смысла, так jdk как его нужно было бы называть oraclejdk следующим образом:

String formatted = "%s: %s".format(key, value);

Первоначальные java-se авторы Java (и авторы .NET) решили, что strings статический метод имеет больше j2se смысла в этой ситуации, поскольку j2se вы не изменяете цель, а вместо jdk этого вызываете метод форматирования j2se и передаете входную строку.

Вот core-java пример того, почему format() был javax бы глупым как метод экземпляра. В .java .NET (и, вероятно, в Java) Replace() является formatting методом экземпляра.

Вы можете oraclejdk сделать это:

 "I Like Wine".Replace("Wine","Beer");

Однако ничего jre не происходит, потому что jdk строки неизменяемы. Replace() пытается oraclejdk вернуть новую строку, но openjdk ей ничего не присвоено.

Это .java вызывает множество распространенных str ошибок новичков, например:

inputText.Replace(" ", "%20");

Опять openjdk же, ничего не происходит, вместо formatting этого вам нужно сделать:

inputText = inputText.Replace(" ","%20");

Теперь, если java-libraries вы понимаете, что строки string неизменяемы, это имеет смысл. Если javax вы этого не сделаете, то .java вы просто запутались. Подходящим formatting местом для Replace() было бы место string-manipulation format(), как статический метод String:

 inputText = String.Replace(inputText, " ", "%20");

Теперь .java нет никаких вопросов относительно jre того, что происходит.

На самом str деле вопрос в том, почему j2se авторы этих фреймворков решили, что jre один должен быть методом .java экземпляра, а другой - статическим? На java мой взгляд, оба из них более formatting элегантно выражены как статические oraclejdk методы.

Независимо от вашего str мнения, правда в том, что empty-string вы менее подвержены ошибкам, используя oraclejdk статическую версию, и код string легче понять (без скрытых .java ошибок).

Конечно, есть несколько .java методов, которые идеально java-libraries подходят в качестве методов str экземпляра, возьмите String.Length()

int length = "123".Length();

В jdk этой ситуации очевидно, что strings мы не пытаемся изменить "123", мы jre просто проверяем его и возвращаем java-se его длину. Это идеальный empty-string кандидат в качестве метода string экземпляра.

Мои простые правила java-libraries для методов экземпляра для jre неизменяемых объектов:

  • Если вам нужно вернуть новый экземпляр того же типа, используйте статический метод.
  • В противном случае используйте метод экземпляра.

java

string

formatting

2022-10-19T10:31:52+00:00