Вставьте символ в строку в определенном месте
Я получаю int
с 6-значным значением. Я хочу показать его как String
с десятичной точкой (.) На 2 цифры от конца int
. Я хотел использовать float
но было предложено использовать String
для лучшего вывода на дисплей (вместо 1234.5
будет 1234.50
). Поэтому мне нужна функция, которая возьмет int
как параметр и вернет правильно отформатированную String
с десятичной точкой из двух цифр с конца.
Сказать:
int j= 123456 Integer.toString(j); //processing... //output : 1234.56
- Использование DocumentFilter.FilterBypass
- Java, Рассчитать количество дней между двумя датами
- Является ли регистр C # нечувствительным к оператору?
- Как я могу разбирать строку в BigDecimal?
- Как преобразовать строку в целое число в C #
- C # как преобразовать большую строку HEX в двоичную
- Как преобразовать std :: string в нижний регистр?
- Почему нет Char.Empty, как String.Empty?
- Как найти все перестановки данного слова в заданном тексте?
- Разница между строкой replace () и replaceAll ()
- Использование printf с не нулевой завершаемой строкой
- strcmp на строке, прочитанной с помощью fgets
- Заменить часть строки другой строкой
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