Вставьте символ в строку в определенном месте

Я получаю int с 6-значным значением. Я хочу показать его как String с десятичной точкой (.) На 2 цифры от конца int . Я хотел использовать float но было предложено использовать String для лучшего вывода на дисплей (вместо 1234.5 будет 1234.50 ). Поэтому мне нужна функция, которая возьмет int как параметр и вернет правильно отформатированную String с десятичной точкой из двух цифр с конца.

Сказать:

 int j= 123456 Integer.toString(j); //processing... //output : 1234.56 

 int j = 123456; String x = Integer.toString(j); x = x.substring(0, 4) + "." + x.substring(4, x.length()); 

Как упоминалось в комментариях, StringBuilder , вероятно, является более быстрой реализацией, а затем использует StringBuffer . Как упоминалось в документах Java:

Этот class предоставляет API, совместимый с StringBuffer, но без гарантии синхронизации. Этот class предназначен для использования в качестве замены для StringBuffer в местах, где буфера строк используется одним streamом (как это обычно бывает). По возможности рекомендуется, чтобы этот class использовался в предпочтении StringBuffer, поскольку он будет быстрее в большинстве реализаций.

Применение :

 String str = Integer.toString(j); str = new StringBuilder(str).insert(str.length()-2, ".").toString(); 

Если вам нужна синхронизация, используйте StringBuffer с аналогичным использованием:

 String str = Integer.toString(j); str = new StringBuffer(str).insert(str.length()-2, ".").toString(); 
 int yourInteger = 123450; String s = String.format("%6.2f", yourInteger / 100.0); System.out.println(s); 

В большинстве случаев использование StringBuilder (как уже было сказано) является хорошим способом сделать это. Однако, если производительность имеет значение, это может быть хорошей альтернативой.

 /** * Insert the 'insert' String at the index 'position' into the 'target' String. * * ```` * insertAt("AC", 0, "") -> "AC" * insertAt("AC", 1, "xxx") -> "AxxxC" * insertAt("AB", 2, "C") -> "ABC * ```` */ public static String insertAt(final String target, final int position, final String insert) { final int targetLen = target.length(); if (position < 0 || position > targetLen) { throw new IllegalArgumentException("position=" + position); } if (insert.isEmpty()) { return target; } if (position == 0) { return insert.concat(target); } else if (position == targetLen) { return target.concat(insert); } final int insertLen = insert.length(); final char[] buffer = new char[targetLen + insertLen]; target.getChars(0, position, buffer, 0); insert.getChars(0, insertLen, buffer, position); target.getChars(position, targetLen, buffer, position + insertLen); return new String(buffer); } 

Вы можете использовать

 System.out.printf("%4.2f%n", ((float)12345)/100)); 

Согласно комментариям, 12345 / 100.0 было бы лучше, как и использование double вместо float.

Если вы используете систему, в которой float стоит дорого (например, нет FPU) или не разрешен (например, в бухгалтерском учете), вы можете использовать что-то вроде этого:

  for (int i = 1; i < 100000; i *= 2) { String s = "00" + i; System.out.println(s.substring(Math.min(2, s.length() - 2), s.length() - 2) + "." + s.substring(s.length() - 2)); } 

В противном случае DecimalFormat является лучшим решением. (вариант StringBuilder выше не будет работать с небольшими номерами (<100)

  public static void main(String[] args) { char ch='m'; String str="Hello",k=String.valueOf(ch),b,c; System.out.println(str); int index=3; b=str.substring(0,index-1 ); c=str.substring(index-1,str.length()); str=b+k+c; } 

Я думаю, что более простым и элегантным решением для вставки строки в определенную позицию будет этот однострочный:

 target.replaceAll("^(.{" + position + "})", "$1" + insert); 

Например, чтобы вставить отсутствующий : во время String:

 "-0300".replaceAll("^(.{3})", "$1:"); 

То, что он делает, сопоставляет символы position с начала строки, группы и заменяет собой группу ( $1 ), за которой следует строка insert . Обратите внимание на replaceAll, хотя всегда есть одно событие, потому что первый параметр должен быть регулярным.

Конечно, он не имеет такой же производительности, как решение StringBuilder, но я считаю, что сжатость и элегантность как простого и удобного для чтения однострочного (по сравнению с огромным методом) достаточно, чтобы сделать его предпочтительным решением в большинстве неэффективных -критические прецеденты.

Примечание. Я решаю общую проблему в названии по причинам документации, конечно, если вы имеете дело с десятичными числами, вы должны использовать уже предлагаемые для домена решения.

 // Create given String and make with size 30 String str = "Hello How Are You"; // Creating StringBuffer Object for right padding StringBuffer stringBufferRightPad = new StringBuffer(str); while (stringBufferRightPad.length() < 30) { stringBufferRightPad.insert(stringBufferRightPad.length(), "*"); } System.out.println("after Left padding : " + stringBufferRightPad); System.out.println("after Left padding : " + stringBufferRightPad.toString()); // Creating StringBuffer Object for right padding StringBuffer stringBufferLeftPad = new StringBuffer(str); while (stringBufferLeftPad.length() < 30) { stringBufferLeftPad.insert(0, "*"); } System.out.println("after Left padding : " + stringBufferLeftPad); System.out.println("after Left padding : " + stringBufferLeftPad.toString()); 

Строка welcomemsg = “0E020E2D0E1A0E040E380E130E170E350E480E2A0E210E310E040E230020004E0075006D00630068006F006B002000300031002800350E1A002F0E020E490E2D0E040E270E320E21002900200E2A0E2D0E1A0E160E320E21002000300032003200360031003200360037003800200E220E010E400E250E340E010E010E14002A00310033003700200E420E170E230E2D0E2D0E01”; System.out.println (“length welcomemsg =” + Math.ceil (welcomemsg.length () / 4));

  int i = 4; int lengthwelcomemsg = welcomemsg.length()/i; String resultwelcomemsg = ""; for(int nadd=0;nadd
		
  • Как создать случайную буквенно-цифровую строку?
  • Почему этот код использует случайные строки для печати «hello world»?
  • Поместить и получить массив String из общих настроек
  • как преобразовать строку java в объект Date
  • Создание переменных с именами из строк
  • Строковый вывод: формат или concat в C #?
  • Левое дополнение строки с нулями
  • Разбор строки с разделителями-запятыми std :: string
  • Как разбить строку на пробел
  • В чем разница между строкой и строкой в ​​C #?
  • Excel VBA: диапазон до строкового массива в 1 шаг
  • Interesting Posts

    Как показать сообщение лица на перенаправленной странице

    Почему zipping zip-файл не уменьшает его размер?

    Почему я не должен обертывать каждый блок в «try» – «catch»?

    Java как создать экземпляр classа из строки

    Установщик WiX msi не устанавливает приложение Winform, созданное с помощью Visual Studio 2017

    Как заставить Mac OS X переименовывать «Модификаторные ключи» для моей внешней клавиатуры?

    Частные сеттеры в Json.Net

    Передача lambda в качестве указателя функции

    Является ли размер кеша или количество ядер более важным при взвешивании производительности процессора?

    Что такое команда оболочки для отображения содержимого файла?

    Thinkpad T60 не включается

    Суррогат против естественных / бизнес-ключей

    Когда использовать виртуальные деструкторы?

    Как я могу сохранить состояние своей программы и загрузить ее?

    Есть ли слушатель, когда WebView отображает его содержимое?

    Давайте будем гением компьютера.