Embora o Java se desenvolva com base no C ++, melhorou muitas das deficiências do C ++. Uma das coisas que devem ser mencionadas são as cordas. Sabemos que, com o aprofundamento do aprendizado, ao entrar no MFC, ao processar strings ou caracteres, você geralmente precisa usar a macro _t () para transformar caracteres ou strings em tipo Unicode. Caso contrário, um bug ocorrerá durante o processamento. Em Java, o personagem Char ou caracteres armazenados na classe de personagens não é um byte, mas 2 bytes. O Unicode é usado, que é apoiar todos os personagens do mundo.
A sequência de caracteres forma uma string e há dois tipos de strings: uma é uma constante de string que não precisa ser modificada após a criação, que é chamada de string constante. Em Java, ele é armazenado usando a classe String;
Uma é uma variável de string que precisa ser modificada após a criação, chamada de variável de string. Em Java, é operado e gerenciado usando a classe StringBuffer.
Classe StringBuffer
1. Crie um objeto de classe StringBuffer
O objeto StringBuffer Class representa uma variável de sequência (observe que é uma "variável"). Cada objeto de classe StringBuffer é uma variável de sequência que pode ser expandida e modificada. A seguir, são apresentados os construtores de classe StringBuffer comumente usados:
(1) public stringbuffer ()
Crie um novo objeto vazio da classe StringBuffer, com o valor inicial de sua capacidade definida para 16 caracteres (observe que são 16 caracteres)
(2) public stringbuffer (comprimento int)
Crie um novo objeto StringBuffer vazio, cujo valor inicial de capacidade é definido como caracteres de comprimento
(3) public stringbuffer (string str)
Crie um novo objeto StringBuffer, cujo conteúdo é o conteúdo do STR, e a capacidade é definida para o comprimento do STR e adicione 16 caracteres (Nota: Adicionar 16 caracteres)
2. Métodos comuns do objeto de classe StringBuffer
(1) Extensão do objeto de classe StringBuffer
A classe StringBuffer fornece dois conjuntos de métodos para expandir os caracteres contidos no objeto StringBuffer, a saber:
1) Public StringBuffer Append
(Objeto obj)
O método Apênd é usado para expandir os caracteres contidos no objeto StringBuffer. Depois de converter o objeto de parâmetro especificado em uma string, anexa -o após o objeto StringBuffer original e retorna o novo objeto StringBuffer. Os objetos de parâmetro adicionais podem ser de vários tipos de dados, como int, char, string, dupla, etc.
2) Inserção pública de stringbuffer (
Int Inserir Offset de posição, tipo de objeto de parâmetro, nome do objeto de parâmetro)
Este método converte o objeto de parâmetro especificado em uma string, insere -o na posição especificada no objeto StringBuffer original e retorna o novo objeto StringBuffer.
(2) o comprimento e a capacidade do objeto de classe StringBuffer
O comprimento de um objeto de classe StringBuffer refere -se ao número de caracteres que ele contém; A capacidade refere -se ao número de espaço de caracteres alocado.
1) comprimento público int ()
Este método retorna o número de caracteres contidos no objeto atual da classe StringBuffer.
2) Capacidade pública int ()
Este método retorna o número de espaço de caracteres alocados pelo objeto atual da classe StringBuffer.
(3) Modificação do objeto de classe StringBuffer
Public void Setcharat (Intindex, Chearch)
Este método substitui o caractere na posição do índice no objeto StringBuffer atual pelo caractere especificado.
(4) atribuição e adição de strings
Strings são tipos de dados que são frequentemente usados em programas. A atribuição e a adição de strings são introduzidas no sistema de compilação Java.
(5) Outros métodos são semelhantes aos da classe String
3. Use a classe StringTokenizer para decompor strings
A classe StringTokenizer está localizada no pacote java.util e, ao usar esta classe, é adicionada no início do programa.
importJava.util.StringTokenizer ou
importJava.util.*
Classe StringTokenizer
Para a classe StringTokenizer, sua principal função é dividir a string de acordo com o personagem dividido, e sua função é semelhante ao método dividido da classe String
1. O construtor da classe StringTokenizer
(1) StringTokenizer (Stringstr)
Crie um objeto StringTokenizer para a string dada STR, cujo delimitador está definido como "/t/n/r/f", ou seja: espaço, guia horizontal, quebra de linha, retorno do carro, caractere da tabela
(2) StringTokenizer (String str, String delim)
Crie um objeto StringTokenizer para a String dinada STR, cujo delimitador é o String Delim especificado e não contém um delimitador por padrão.
3) StringTokenizer (String str, String delim, Boolean ReturnDelims)
Crie um objeto StringTokenizer para a string dada STR cujo delimitador é o delim string especificado. Se o retornodelims for verdadeiro, cada string no objeto StringTokenizer criado contém um delimitador, caso contrário, ele não contém um delimitador.
2. Métodos comuns da classe StringTokenizer
NintCountTokens ()
Retorna o número de substringas no objeto StringTokenizer após ser dividido
NBooleHasMoreElements ()
A função deste método é a mesma do método hasMoreTokens ()
NBooleHasmoreTokens ()
Detecte se o objeto StringTokenizer contém uma substring dividida. Nesse caso, ele retornará verdadeiro, caso contrário, retornará falso.
ObjectNextElement ()
Este método tem a mesma função que NextToken (). A principal diferença é que ele não retorna um objeto de string, mas um objeto
StringNextToken ()
Retorne a próxima substring dividida no objeto StringTokenizer
StringNextToken (String delim)
Retorna a próxima substring dividida no objeto StringTokenizer, mas o delimitador é redefinido para delim
NIN Fato, em algumas linguagens de programação, como C, a string é composta por matrizes de caracteres e o final de cada string está marcado "/0", mas esse não é o caso em Java.
Nin Java, as cordas geralmente existem como objetos da classe String, como: strings = "Eu gosto de java!", Onde "eu gosto de java!" é um objeto.
Portanto, as cordas e as matrizes de personagens em Java são completamente diferentes e também são diferentes das cordas em C!
NIN para facilitar a conversão de matrizes de string e caracteres, muitos desses construtores e métodos são fornecidos na classe String
n, como String de construtor (Char [] valor)
n Método TOCharArray ()
Método Valorof (CHAR [] dados)
Piscina constante
Para constantes de sequência que aparecem no programa de origem, quando o programa for executado, elas serão salvas em um pool constante para o cache.
Comparando variáveis que referenciam essas seqüências em cache em pools constantes também obterá o resultado correto com ==.
No entanto, em tempo de execução, várias operações em strings como +, substring etc. produzirão novos objetos de string.
Mas compiladores poderosos otimizarão a costura de constantes de cordas, como quando S3 = "Hell" + "O", S3 ainda apontará para a string no pool constante. No entanto, para operações variáveis, é impossível exigir que a máquina virtual execute como S1 + S2 e determine se o resultado já está no pool constante. Portanto, use é igual em vez de == para determinar se duas seqüências são iguais.
public static void main (string [] args) {// As constantes de sequência são colocadas em pool constante. String S1 = "Hello"; String s2 = "hello"; String s3 = "inferno" + "o"; System.out.println (S1 == S2); System.out.println (S1 == S3); // operação como +, substring na string Crie novo. String s4 = "inferno"; String s5 = s4 + "o"; System.out.println (S1 == S5); System.out.println (S1.Equals (S5)); // A substring possui manipulação especial na substring (0) string s6 = s1.substring (0); System.out.println (S1 == S6); }Teste os código de bytes de S1, S2, S3:
0: LDC #16; // string hello
2: store_1
3: LDC #16; // string hello
5: store_2
6: LDC #16; // string hello
8: store_3
Teste os código de bytes de S4 e S5:
41: LDC #30; // String Hell
43: loja 4
45: novo #32; // Classe java/lang/stringbuilder
48: dup
49: Aload 4
51: Invokestatic #34; // método java/lang/string.valueof: (ljava/lang/objeto;) ljava/lang/string;
54: Invokespecial #40; // Método java/lang/stringbuilder. "<ingit>" :( ljava/lang/string;) v
57: LDC #43; // string 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;
Observe que o método da substring, a substring (0,3) é uma string que obtém dos caracteres 0 a 2. O motivo desse design pode ser que é fácil calcular o comprimento da substring, 3-0 = 3. Ao mesmo tempo, a substring possui processamento de otimização especial para parâmetros especiais:
public String substring (int BeginIndex, int endindex) {if (BeginIndex <0) {lança new StringIndexoutOfBoundSexception (BELKIndex); } if (endIndex> count) {lança new stringIndexoutOfBoundSexception (endIndex); } if (BeginIndex> endIndex) {lança new StringIndexoutOfBoundSexception (endIndex - BELKIndex); } return ((BeginIndex == 0) && (endIndex == count))? isto: new string (deslocamento + BeginIndex, endIndex - BeginIndex, valor); } A partir disso, podemos ver que não há nada de mágica por trás do objeto String, e ter alguma compreensão do bytecode pode entendê -lo melhor.
De fato, muitas informações sobre classes e métodos são armazenadas no pool constante, como nomes de pacotes, nomes de classes, assinaturas de métodos etc. Se você estiver interessado, poderá realizar pesquisas detalhadas.