Nasıl CharSequence dönüştürmek için String?


Yanıtlar:


339

toString()Yöntemini çağırarak .

Bu dizideki karakterleri bu diziyle aynı sırada içeren bir dize döndürür. Dizenin uzunluğu bu dizinin uzunluğu olacaktır.


@TheOnlyAnil, çağırmak setText(CharSequence)ihtiyacınız olanı yapmıyor mu?
Mike Samuel

ActionBar başlığını tıklanabilir yapmak istiyorum.
TheOnlyAnil

@TheOnlyAnil, belki bunu bir soru olarak sormalısın. Teğetsel olarak ilgili bir sorunun cevabına ilişkin yorumlar, ihtiyaçlarınızı karşılamak ve denemek için iyi bir yer değildir.
Mike Samuel

Stackoverflow herhangi bir soru göndermeme izin vermiyor. : / btw Dün gece yaptým. Özel eylem çubuğu çözüm :)
TheOnlyAnil

1
@WillByers çıktı bir CharSequence dizisi toString gibi görünüyor, CharSequence değil.
Mike Samuel

90

Burada biraz sorun olan ince bir sorun var.

toString()Yöntem, bir baz uygulaması vardır Object. CharSequencebir arayüzdür; ve toString()yöntem bu arabirimin bir parçası olarak görünse de, derleme zamanında onu geçersiz kılmaya ve CharSequence toString()yöntemin javadocunun yönteme eklediği ek kısıtlamalara uymaya zorlayacak hiçbir şey yoktur toString(); yani, tarafından döndürülen sırayla karakterleri içeren bir dize döndürmelidir charAt().

IDE'niz muhtemelen geçersiz kılmanız gerektiğini hatırlatarak size yardımcı olmaz toString(). Örneğin, intellij'de, yeni bir CharSequenceuygulama oluşturursanız göreceğiniz şey budur : http://puu.sh/2w1RJ . Yokluğunu not edin toString().

Eğer güvenirse toString()keyfi üzerine CharSequence, bu olmalıdır yapma işlevi CharSequenceuygulayıcısı düzgün bir iş yaptı. Ancak herhangi bir belirsizlikten tamamen kaçınmak istiyorsanız, bir StringBuilderve kullanmalısınız append():

final StringBuilder sb = new StringBuilder(charSequence.length());
sb.append(charSequence);
return sb.toString();

9
Hata yapmamalı / kodunuzu daha da kötüleştirmemelisiniz, çünkü diğerleri hata yapmış olabilir.
Lodewijk

9
return new StringBuilder (charSequence) .toString (); tek bir astar eşdeğeri.
Gábor Lipták

22
BU cevap yanlışCharSequence arayüzü açıkça tanımlar toString()- implementor bu kaçırmış olmaz. Javadoc durumları "bu sekans ile aynı sırada bu sırayla karakterleri içeren bir dizge. Dize uzunluğunu bu sekansın uzunluğu olacaktır" olarak başlangıçtan itibaren 1.4 . İnsanlar, lütfen ne doğruladığınızı doğrulayın
earcam

2
Bu aptalca. Uygulayıcının sözleşmeyi takip etmesine güvenmiyorsanız, tüm bahisler iptal edilir. Bir parametre olarak iletmek de StringBuilderbeklediğiniz şeyi yapamaz. Aynı gibi başka bir arayüz, gider Listveya Setözellikle onların equals()ve hashCode()geçersiz kılma özelliği olmayan derlemek, ancak yöntemler gerekir sözleşmesine göre geçersiz kılınan olun.
shmosel

3
Arayüzün bunu yapması muhtemelen bu konuda zayıf bir karardır ve cevabım bunun insan hatasının meydana gelmesi için normalden daha kolay bir yer olduğunu vurgulamaktadır .
fragorl

19

String.valueOf () öğesini doğrudan kullanabilirsiniz

String.valueOf(charSequence)

Bu aslında aynı olsa da aslında toString çağırmadan önce toString()bir null kontrol yapar charSequence.

Bu, bir yöntem bir charSequenceveya nulldeğer döndüğünde faydalıdır .


8
Bu aslında bugün beni biraz ısırdı. charSequencenull ise , döndürülen dize olur "null"ve olmaz null.
ChrisThomas

Ah. Mantıklı. Bu cevabı kaldıracağım
Abhishek Batra

1
Bunun bazı durumlar için mükemmel olduğunu düşünüyorum.
Shukant Pal
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.