2011-07-06 5 views
18

Jaki jest najskuteczniejszy sposób przekazania pojedynczego znaku do metody oczekującej CharSequence?Najbardziej efektywny sposób konwersji pojedynczego znaku na CharSequence

To jest to, co mam:

textView.setText(new String(new char[] {c})); 

Według the answers given here, jest to rozsądny sposób to zrobić, gdzie wejście jest tablicą znaków. Zastanawiałem się, czy nie ma podstępnego skrótu, który mógłbym zastosować w przypadku pojedynczego pudła.

Odpowiedz

3

Shorthand, jak w Najmniej wpisane znaki możliwe:

c+""; // where c is a char 

w całości:

textView.setText(c+""); 
1
char c = 'y'; 
textView.setText(""+c); 
9

Patrząc na realizacji sposobu Character.toString(char c) ujawnia, że ​​oni używają prawie ten sam kod, którego używasz:

public String toString() { 
     char buf[] = {value}; 
     return String.valueOf(buf); 
    } 

Dla czytelności, należy po prostu użyć Character.toString(c).

Innym skutecznym sposobem byłoby prawdopodobnie

new StringBuilder(1).append(c); 

To zdecydowanie bardziej wydajny niż za pomocą operatora + ponieważ, zgodnie z javadoc:

języku Java zapewnia specjalne wsparcie dla operatora konkatenacji (+) i do konwersji innych obiektów na łańcuchy. konkatenacji ciąg jest realizowane poprzez StringBuilder (lub StringBuffer) klasy i jej sposobu dopisywania

+1

Dzięki za wyjaśnienie. Idę z zaakceptowaną odpowiedzią, ponieważ podejrzewam, że klasa String prawdopodobnie ma wbudowaną tabelę jednoliterowych ciągów znaków, aby efektywnie obsługiwać funkcję valueOf(). –

2

Rozwiązanie bez konkatenacji jest taka:

Character.valueOf(c).toString(); 
3

Najbardziej kompaktowa CharSequence można dostać, gdy masz garść znaków to CharBuffer. Aby zainicjować to z wartością char:

CharBuffer.wrap(new char[]{c}); 

To powiedziawszy, za pomocą Strings jest nieco bardziej czytelny i łatwy w użyciu.