Insertar un personaje en una cuerda en una posición determinada

Me estoy metiendo en un int con un valor de 6 dígitos. Quiero mostrarlo como una String con un punto decimal (.) A 2 dígitos desde el final de int . Quería usar un float pero me sugirieron usar String para una mejor salida de pantalla (en lugar de 1234.5 será 1234.50 ). Por lo tanto, necesito una función que tome un int como parámetro y devuelva la String correctamente formateada con un punto decimal de 2 dígitos desde el final.

Decir:

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

Como se mencionó en los comentarios, un StringBuilder es probablemente una implementación más rápida que usar un StringBuffer . Como se menciona en los documentos de Java:

Esta clase proporciona una API compatible con StringBuffer, pero sin garantía de sincronización. Esta clase está diseñada para usarse como un reemplazo directo para StringBuffer en lugares donde el búfer de cadena estaba siendo utilizado por un solo hilo (como generalmente es el caso). Siempre que sea posible, se recomienda que esta clase se use con preferencia a StringBuffer, ya que será más rápida en la mayoría de las implementaciones.

Uso:

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

O si necesita sincronización use StringBuffer con un uso similar:

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

En la mayoría de los casos de uso, usar un StringBuilder (como ya se respondió) es una buena forma de hacerlo. Sin embargo, si el rendimiento importa, esta puede ser una buena alternativa.

 /** * 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); } 

Podrías usar

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

Según los comentarios, 12345 / 100.0 sería mejor, al igual que el uso de doble en lugar de flotar.

Si está utilizando un sistema donde el flotador es costoso (p. Ej., Sin FPU) o no está permitido (p. Ej., En contabilidad), podría usar algo como esto:

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

De lo contrario, DecimalFormat es la mejor solución. (La variante StringBuilder anterior no funcionará con números pequeños (<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; } 

Creo que una solución más simple y más elegante para insertar una Cadena en una posición determinada sería este delineador:

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

Por ejemplo, para insertar una falta : en una cadena de tiempo:

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

Lo que hace es, empareja los caracteres de position desde el comienzo de la cadena, agrupa eso y reemplaza al grupo consigo mismo ( $1 ) seguido de la cadena de insert . Tenga en cuenta el replaceall, a pesar de que siempre hay una ocurrencia, porque el primer parámetro debe ser una expresión regular.

Por supuesto, no tiene el mismo rendimiento que la solución StringBuilder, pero creo que la concisión y elegancia como un simple y más fácil de leer (en comparación con un método enorme) es suficiente para que sea la solución preferida en la mayoría de los casos sin rendimiento -críticos casos de uso.

Tenga en cuenta que estoy resolviendo el problema genérico en el título por razones de documentación, por supuesto, si está tratando con números decimales, debe usar las soluciones específicas de dominio ya propuestas.

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

Cadena 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;naddUtilidades para leer el archivo de texto de recursos en String (Java)
  • Regex para hacer coincidir la cadena que contiene dos nombres en cualquier orden
  • Android: ¿Cómo obtengo cadenas de recursos usando su nombre?
  • ¿Cómo convertir la fecha actual en una cadena en java?
  • Comparación de cadenas – Android
  • Cadenas de Java: compare a () frente a igual ()
  • La mejor manera de repetir un personaje en C #
  • Java, calcula el número de días entre dos fechas
  • Forma correcta de dividir una std :: cadena en un vector
  • ¿Tiene C # un Tokenizer de cadenas como el de Java?
  • ¿Qué ciclo tiene un mejor rendimiento? ¿Por qué?