Aunque Java se desarrolló en base a C ++, ha mejorado muchas de las deficiencias de C ++. Una de las cosas que deben mencionarse son las cadenas. Sabemos que con la profundización del aprendizaje, al ingresar a MFC, al procesar cadenas o caracteres, a menudo necesita usar la macro _t () para convertir los caracteres o las cuerdas en tipo Unicode. De lo contrario, se producirá un error durante el procesamiento. En Java, el personaje de caracteres o personajes almacenados en la clase de caracteres no es un byte, sino 2 bytes. Se usa Unicode, que es para apoyar a todos los personajes del mundo.
La secuencia de caracteres forma una cadena, y hay dos tipos de cadenas: una es una constante de cadena que no necesita modificarse después de la creación, que se llama constante de cadena. En Java, se almacena usando la clase de cadena;
Una es una variable de cadena que debe modificarse después de la creación, llamada variable de cadena. En Java, se opera y se administra utilizando la clase StringBuffer.
Clase StringBuffer
1. Cree un objeto de clase StringBuffer
El objeto de clase StringBuffer representa una variable de cadena (tenga en cuenta que es una "variable"). Cada objeto de clase StringBuffer es una variable de cadena que se puede ampliar y modificar. Los siguientes son los constructores de clase StringBuffer de uso común:
(1) Public StringBuffer ()
Cree un nuevo objeto vacío de la clase StringBuffer, con el valor inicial de su capacidad establecido en 16 caracteres (tenga en cuenta que es 16 caracteres)
(2) Public StringBuffer (int longitud)
Cree un nuevo objeto StringBuffer vacío, cuyo valor inicial de capacidad se establece en caracteres de longitud
(3) Public StringBuffer (String Str)
Cree un nuevo objeto StringBuffer, cuyo contenido es el contenido de STR, y la capacidad se establece en la longitud de STR y agregue 16 caracteres (nota: Agregue 16 caracteres)
2. Métodos comunes del objeto de clase StringBuffer
(1) Extensión del objeto de clase StringBuffer
La clase StringBuffer proporciona dos conjuntos de métodos para expandir los caracteres contenidos en el objeto StringBuffer, a saber:
1) Public StringBuffer Adjunto
(Obj obj)
El método Append se utiliza para expandir los caracteres contenidos en el objeto StringBuffer. Después de convertir el objeto de parámetro especificado en una cadena, lo agrega después del objeto StringBuffer original y devuelve el nuevo objeto StringBuffer. Los objetos de parámetros adicionales pueden ser de varios tipos de datos, como int, char, cadena, doble, etc.
2) Inserto público de StringBuffer (
int Insert Posición de compensación, tipo de objeto de parámetro, nombre del objeto de parámetro)
Este método convierte el objeto de parámetro especificado en una cadena, lo inserta en la posición especificada en el objeto StringBuffer original y devuelve el nuevo objeto StringBuffer.
(2) La longitud y la capacidad del objeto de clase StringBuffer
La longitud de un objeto de clase StringBuffer se refiere al número de caracteres que contiene; La capacidad se refiere al número de espacio de caracteres asignado.
1) Public int longitud ()
Este método devuelve el número de caracteres contenidos en el objeto de clase StringBuffer actual.
2) Capacidad pública int ()
Este método devuelve el número de espacio de caracteres asignado por el objeto de clase StringBuffer actual.
(3) Modificación del objeto de clase StringBuffer
Public void setcharat (Intindex, chearch)
Este método reemplaza al carácter en la posición de índice en el objeto StringBuffer actual con el carácter especificado CH.
(4) Asignación y adición de cadenas
Las cadenas son tipos de datos que a menudo se usan en programas. La asignación y la adición de cadenas se introducen en el sistema de compilación Java.
(5) Otros métodos son similares a los de la clase de cadena
3. Use la clase StringTokenizer para descomponer cadenas
La clase StringTokenizer se encuentra en el paquete java.util, y al usar esta clase, se agrega al comienzo del programa.
importJava.util.StringTokenizer o
importJava.util.*
Clase de stringTokenizer
Para la clase StringTokenizer, su función principal es dividir la cadena de acuerdo con el carácter dividido dado, y su función es similar al método dividido de la clase de cadena
1. El constructor de la clase StringTokenizer
(1) StringTokenizer (Stringstr)
Cree un objeto StringTokenizer para la cadena Str dada, cuyo delimitador se establece en "/t/n/r/f", es decir: espacio, pestaña horizontal, ruptura de línea, retorno de carro, caracteres de tabla
(2) StringTokenizer (String Str, String Delim)
Cree un objeto StringTokenizer para la cadena STR dada, cuyo delimitador es el delimer de cadena especificado y no contiene un delimitador de forma predeterminada.
3) StringTokenizer (String Str, String Delim, Boolean Returndelims)
Cree un objeto StringTokenizer para la cadena dada STR cuyo delimitador es el delimer de cadena especificado. Si ReturnDelims es verdadero, cada cadena en el objeto StringTokenizer creado contiene un delimitador, de lo contrario no contiene un delimitador.
2. Métodos comunes de la clase StringTokenizer
nintcountTokens ()
Devuelve el número de subcadenas en el objeto StringTokenizer después de dividirse
nbooleanhasmoreelements ()
La función de este método es la misma que la del método Hasmoretokens ()
nbooleanhasmoretokens ()
Detectar si el objeto StringTokenizer contiene una subcadena dividida. Si es así, devolverá verdadero, de lo contrario devolverá falso.
ObjectNextElement ()
Este método tiene la misma función que NextToken (). La principal diferencia es que no devuelve un objeto de cadena, sino un objeto de objeto
StringNextToken ()
Devuelve la siguiente subcandadora dividida en el objeto StringTokenizer
StringNextToken (deliminador de cadenas)
Devuelve la siguiente subcadena dividida en el objeto StringTokenizer, pero el delimitador se restablece para deliminar
Hecho ninguno, en algunos lenguajes de programación, como C, la cadena está compuesta de matrices de caracteres, y el final de cada cadena está marcado "/0", pero este no es el caso en Java.
Nin Java, las cadenas generalmente existen como objetos de la clase de cadena, como: Strings = "¡Me gusta Java!", Donde "¡Me gusta Java!" es un objeto.
Por lo tanto, las cadenas y las matrices de personajes en Java son completamente diferentes, ¡y también son diferentes de las cuerdas en C!
NIN orden para facilitar la conversión de matrices de cadena y caracteres, muchos de estos constructores y métodos se proporcionan en la clase de cadena
n, como la cadena de constructor (Char [] valor)
n método toCharArray ()
Método Value de (char [] datos)
Piscina constante
Para las constantes de cadena que aparecen en el programa fuente, cuando se ejecuta el programa, se guardarán en un grupo constante para caché.
La comparación de variables que hace referencia a estas cuerdas almacenadas en caché en grupos constantes también obtendrá el resultado correcto con ==.
Sin embargo, en tiempo de ejecución, varias operaciones en cadenas como +, subcadena, etc. producirán nuevos objetos de cadena.
Pero los poderosos compiladores optimizarán la costura de las constantes de cadena, como cuando S3 = "Hell" + "O", S3 aún apuntará a la cadena en el grupo constante. Sin embargo, para operaciones variables, es imposible exigir que la máquina virtual realice como S1 + S2 y determine si el resultado ya está en el grupo constante. Por lo tanto, use iguales en lugar de == para determinar si dos cadenas son iguales.
public static void main (string [] args) {// Las constantes de cadena se colocan en un grupo constante. Cadena s1 = "hola"; Cadena s2 = "hola"; Cadena s3 = "infierno" + "o"; System.out.println (S1 == S2); System.out.println (S1 == S3); // Operación como +, la subcadena en la cadena crea una nueva. Cadena s4 = "infierno"; Cadena S5 = S4 + "O"; System.out.println (S1 == S5); System.out.println (S1.Equals (S5)); // La subcadena tiene un manejo especial de la subcadena (0) String S6 = S1.Substring (0); System.out.println (S1 == S6); }Pruebe los bytecodes de S1, S2, S3:
0: LDC #16; // cadena hola
2: Store_1
3: LDC #16; // cadena hola
5: store_2
6: LDC #16; // cadena hola
8: store_3
Pruebe los bytecodes de S4 y S5:
41: LDC #30; // HIBLE INFIERNO
43: tienda 4
45: nuevo #32; // clase java/lang/stringBuilder
48: DUP
49: Aload 4
51: Invokestatic #34; // método java/lang/string.valueof: (ljava/lang/object;) ljava/lang/string;
54: Invokespecial #40; // método java/lang/stringBuilder. "<Init>" :( ljava/lang/string;) V
57: LDC #43; // cadena o
59: InvokeVirtual #45; // método java/lang/stringBuilder.append: (ljava/lang/string;) ljava/lang/stringBuilder;
62: InvokeVirtual #49; // método java/lang/stringBuilder.ToString :() ljava/lang/string;
Tenga en cuenta que el método de subcadena, la subcadena (0,3) es una cadena que obtiene de los caracteres 0 a 2. La razón de este diseño puede ser que es fácil calcular la longitud de la subcadena, 3-0 = 3. Al mismo tiempo, la subcadena tiene un procesamiento de optimización especial para parámetros especiales:
Public String Substring (int BeginIndex, int EndIndex) {if (beginIndex <0) {tire nuevo StringIndexOutofBoundSException (BeginIndex); } if (endIndex> count) {tire stringindexoUtofboundsexception (endIndex); } if (beginIndex> endIndex) {tire stringindexoUtofBoundsexception (endIndex - beginIndex); } return ((beginIndex == 0) && (endIndex == Count))? esto: nueva cadena (offset + beginIndex, endindex - beginIndex, valor); } De esto podemos ver que no hay nada de magia detrás del objeto de cadena, y tener cierta comprensión del Bytecode puede entenderlo mejor.
De hecho, mucha información sobre clases y métodos se almacenan en el grupo constante, como nombres de paquetes, nombres de clases, firmas de métodos, etc. Si está interesado, puede realizar investigaciones en profundidad.