2013-10-28 19 views
13

Negatif olan Java'da string.substring için end index olarak kullanılabilir mi?Java'da, negatif olanı alt dizeyle kullanabilir misiniz?

Örnek:

String str = "test"; 
str.substring(0, str.indexOf("q")); 

Düzenleme: Hiçbir yerde javadocs o endIndex negatif olamayacağı doğrudan diyor. Diğer dillerdeki ve kütüphanelerde negatif endindex'e izin veren bir alt dize uygulaması vardır, ancak 'un bir negatif başlangıç ​​endeksine izin vermemesi, bu durumun açıkça belirtilmesiyle alakalı görünmektedir. Hiçbir şekilde ima edilmez. (Düzenleme: Tamam, gevşek bir şekilde ima edildi, ama ben ve görünüşe göre bana bu soruyu sordu diğerleri hala oldukça belirsiz buluyorum. Bu basit bir Q + A olması gerektiği anlamına geliyordu aslında bana bir cevap bulmak için çalışıyorum alt dize endIndex yanı sıra dize uzunluğu bir StringIndexOutOfBoundsException sonuçlanacak daha büyük bir sayı için negatif sayılar kullanılarak bu önemsiz bir soru)

cevap

28

yok. Negatif endeksler,'a izin verilmeyen 'dır. String#substring(int beginIndex, int endIndex) kaynaktan

:

Atar: IndexOutOfBoundsException - beginIndex negatif, ya da endIndex bu String nesnesi uzunluğundan daha büyük ya da beginIndex endIndex daha büyük ise.

belgeler ile doğrudan endIndex negatif olamayacağını ifade etmese de

bu türetilebilir. Bu gerçekler ilgili gereksinimleri verimleri Yeniden Yazma:

  1. "beginIndex negatif olamaz" ->endIndex >= beginIndex

Böylece bir olduğunu ->beginIndex >= 0

  • "beginIndex daha küçük veya eşit olmalıdır endIndex için" endIndex >= beginIndex >= 0 gereksinimi, yani endIndex 'un değerini olumsuz yönde etkileyemeyeceği anlamına gelir. Neyse

    , str.substring(0, -x) trivially negatif uç endeksi anlamı konusunda aynı fikre sahip varsayarak str.substring(0, str.length() - x) olarak yeniden yazılabilir. Orijinal sınır gereksinimleri hala geçerli. İlginç

    , String#subSequence açıkça olumsuz bir endIndex korusun gelmez. Bu nedenle, belgelerin her iki yöntemin de aynı basitleştirilmiş önkoşul metnini paylaşacağı şekilde temizlenebileceğini düşünmektedir. (Bir bonus olarak: "Java 7" alt Sonuç belgelerinde de önemli bir yazım hatası var.)

  • 2

    yok.

    (Bunu net Bu basit bir cevap bulmak için ne kadar zor inanmazsınız)

    İlgili konular