Forma correcta de aparar um texto em Java
em Java, estou a fazer isto para aparar uma corda:
String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
input = input.trim();
System.out.println("after->>"+input+"<<-");
a saída é:
before->> some Thing <<-
after->>some Thing<<-
funciona. Mas pergunto-me se atribuindo uma variável a si mesma, estou a fazer a coisa certa. Não quero desperdiçar recursos criando outra variável e atribuindo-lhe o valor reduzido. Gostaria de fazer o corte no local.
Então, estou a fazer isto bem?8 answers
As Cadeias de caracteres são constantes; os seus valores não podem ser alterados após a sua criação. Os 'buffers' de texto suportam os 'strings' mutáveis. Porque os objetos de String são imutáveis eles podem ser compartilhados.
Aparar
Aparar cordas públicas ()
Devolve uma cópia do texto, com espaços em branco iniciais e finais omitir. Se este objecto representa uma sequência de caracteres vazia, ou os primeiros e últimos caracteres da sequência de caracteres representada por este objecto de texto ambos têm códigos superiores a '\u0020 ' (o espaço caractere), então uma referência a este objeto de cadeia é retornada.
Caso contrário, se não existir um carácter com um código superior a '\u0020' no texto, então um novo objecto de texto que representa um texto vazio é criado e devolvido.
Caso contrário, que k seja o índice do primeiro carácter do texto cujo código é superior a "\u0020" e que seja o índice do último carácter do texto cujo código é maior que'\u0020'. A é criado um novo objecto de texto, representando o sub-texto deste texto que começa com o carácter no índice k e termina com o caractere no índice m - isto é, o resultado disto.substring (k, m+1).
Este método pode ser utilizado para aparar espaços em branco (tal como acima definido) a partir de o início e fim de uma corda.
Devolve:
Uma cópia deste texto com o espaço branco inicial e final removido, ou este texto se não tiver branco inicial ou final espaco.
Como as cadeias de caracteres em Java são objectos imutáveis , não há forma de executar a limpeza no local. A única coisa que você pode fazer para aparar o texto é criar uma nova versão aparada do seu texto e devolvê-lo (e isso é o que o método trim()
faz).
Na prática, a implementação do método trim () é otimizada de modo que ele está criando (e retornando) outra variável apenas quando necessário. Em outros casos (quando não há realmente necessidade de aparar) ele está retornando uma referência à string original (neste caso você está realmente atribuindo uma variável para si mesmo).
De qualquer forma, o Trimm() não modifica o texto original, por isso esta é a forma correcta de O usar.
A abordagem tradicional é utilizar o método de acabamento alinhado...por exemplo:
String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
System.out.println("after->>"+input.trim()+"<<-");
Se for uma corda que deve ser aparada para todas as utilizações, apara-a à frente, como fizeste. Reutilizar a mesma localização de memória como você fez não é uma má ideia, se você quiser comunicar sua intenção a outros desenvolvedores. Ao escrever em Java, o gerenciamento de memória não é uma questão chave, uma vez que o "dom" de Java é que você não precisa geri-lo.
Se tivermos de aparar uma cadeia de caracteres sem usar os métodos trim(), split() de Java, então seguir o código fonte pode ser útil.
static String allTrim(String str)
{
int j = 0;
int count = 0; // Number of extra spaces
int lspaces = 0;// Number of left spaces
char ch[] = str.toCharArray();
int len = str.length();
StringBuffer bchar = new StringBuffer();
if(ch[0] == ' ')
{
while(ch[j] == ' ')
{
lspaces++;
j++;
}
}
for(int i = lspaces; i < len; i++)
{
if(ch[i] != ' ')
{
if(count > 1 || count == 1)
{
bchar.append(' ');
count = 0;
}
bchar.append(ch[i]);
}
else if(ch[i] == ' ')
{
count++;
}
}
return bchar.toString();
}
O método java string trim() elimina espaços iniciais e finais
public class StringTrimExample{
public static void main(String args[]){
String s1=" hello string ";
System.out.println(s1+"javatpoint");//without trim()
System.out.println(s1.trim()+"javatpoint");//with trim()
}}
resultado
hello string javatpoint
hello stringjavatpoint
Este pedaço de código que fiz há muito tempo, que leva um array de caracteres como parâmetro e devolve um texto. Pouco mais de modificações necessárias para pontuações, embora com valores ascii. Pode ser de alguma ajuda.
public static String trim(char [] input){
char [] output = new char [input.length];
int j=0;
int jj=0;
if(input[0] == ' ' ) {
while(input[jj] == ' ')
jj++;
}
for(int i=jj; i<input.length; i++){
if(input[i] !=' ' || ( i==(input.length-1) && input[input.length-1] == ' ')){
output[j]=input[i];
j++;
}
else if (input[i+1]!=' '){
output[j]=' ';
j++;
}
}
char [] m = new char [j];
int a=0;
for(int i=0; i<m.length; i++){
m[i]=output[a];
a++;
}
return new String (m);
}