Tengo este método ,

  public static void main(String[] args) {

    String s = "Java";
    StringBuilder buffer = new StringBuilder(s);
    change(buffer);

       System.out.println("What's strBuf.charAt(5)? " + strBuf.charAt(3));
       System.out.println(buffer);
  }

     private static void change(StringBuilder buffer) {

          buffer.append(" and HTML");
  }

Cuando ejecuto el código mediante el uso de StringBuilder obtengo un mensaje de error ,
«El constructor de StringBuilder(Cadena) es indefinido
El método charAt(int) no está definido para el tipo StringBuilder»

En el proceso de depuración , traté de StringBuffer vez y funcionó perfectamente.
El contenido de la StringBuffer objeto está compilado para «Java y Eclipse..»

  public static void main(String[] args) {

    String s = "Java";
    StringBuffer strbuf = new StringBuffer(s);
    change(strbuf);

               System.out.println("The Stringbuffer.charAt(5) is ? " + strbuf.charAt(3));
           System.out.println(strbuf);
 }

       private static void change(StringBuffer strbuf) {

                       strbuf.append(" and Eclipse");
 }
 }

Alguien puede aclararme por qué el último»StringBuffer» trabajado y Stringbuilder no.
y si es o no es legal para pasar la cadena en el en el StringBuilder constructor. «StringBuilder(s);»

  • Tienes razón, puedo comprobar el java docs y que indica que el paso de una cadena en la StringBuilder constructor es legal, pero aún no funciona en la versión de eclipse que estoy utilizando .Cualquier sugerencia.
InformationsquelleAutor zee | 2013-06-18

3 Comentarios

  1. 4

    StringBuilder hace tener un constructor de la aceptación de un String como argumento, y hace han un .charAt() método (que se debe implementar, ya que implementa CharSequence).

    Conclusión: este es un accidente de la parte de la IDE, que no importa la correcta StringBuilder. Utilice otra biblioteca que tiene el desafortunado «propiedad» de haber implementado una clase con el mismo nombre, pero no en el mismo paquete.

    Ir a ver en la parte superior de su archivo si la línea de importación es:

    import java.lang.StringBuilder;
    • funcionó , he importado el malo clase StringBuilder en lugar de java.lang.Class. Gracias @fge
    • «usted» importados o su IDE hizo? 😉
    • mi IDE sugerido y me dirigí a la sugerencia. @fge
  2. 3

    Podría haber importado un mal clase StringBuilder en lugar de java.lang.StringBuilder que tiene un StringBuilder(String) constructor y charAt(int) método.

    Podría usted comprobar su importación. Usted debe tener esta

    import java.lang.StringBuilder;
    • Gracias @Amin, sí, esa era la cuestión.
  3. 0

    Asegúrese de que usted está no definir el nombre de la clase como StringBuilder

    Por Ejemplo:
    Incluso si se importa correctamente

     import java.lang.StringBuilder;

    Pero si usted escribe su clase como

     public class StringBuilder { //If class name matches below Object Creation
     public static void main(String[] args) {
    
    String s = "Java";
    StringBuilder buffer = new StringBuilder(s);  //Object creation
    change(buffer);
    
       System.out.println("What's strBuf.charAt(5)? " + strBuf.charAt(3));
       System.out.println(buffer);
    }
    
     private static void change(StringBuilder buffer) {
    
          buffer.append(" and HTML"); //you will get this error at append
      //The method append(String) is undefined for the type StringBuilder
    } 
    }

    Sugerencias

    Cambiar el nombre de la clase nombre a algo más pero no StringBuilder

Dejar respuesta

Please enter your comment!
Please enter your name here