2010-10-26 25 views
6

Bir yanıt bulamadım .. Eğer sahiplerse: String s = "How are you"? Bunu iki dizeye nasıl bölebilirim, yani ilk dize 0..s.length()/2 ve ikinci dize s.length()/2+1..s.length()?Java'da bir dizgeyi konuma göre bölme

Teşekkürler!

+2

Uzunluk kaçsa ne olur? – Fluffy

+0

@roddik: Uzunluğun bir int olduğu ve 2'nin bir int olduğu göz önünde bulundurulduğunda, bu tamsayı bölüştürür ve ikinci dizeden daha kısa bir ilk dizeyle sonuçlanır. – Powerlord

cevap

5

kullanabilirsiniz 'alt dize (son, başlangıç)' de parkur çek dize önce boş değilse: Ve birlikte dize bekliyoruz

String first = s.substring(0, s.length()/2); 
String second = s.substring(s.length()/2); 

garip uzunluk? Bu durumda, bu vakayı doğru şekilde ele almak için mantık eklemelisiniz.

+0

Ama bu bile işe yaramıyor ... '' sen misin '' ve '' sen '' – aioobe

+0

@Torres, hayır, bu orta karakteri özleyecektir. (ve boş dizeye bir istisna atınız) – aioobe

+1

Alois'in cevabı yanlıştır ve Torres de yanlıştır. Doğru cevap "String s =" Nasılsın? "; String first = s.substring (0, s.length()/2); Dize ikinci = s.substring (s.length()/2); – Ralph

2

String.substring(int) ve String.substring(int, int) yöntemini kullanın.

int cutPos = s.length()/2; 
String s1 = s.substring(0, cutPos); 
String s2 = s.substring(cutPos, s.length()); //which is essentially the same as 
//String s2 = s.substring(cutPos); 
+0

Hata yaptınız: substring (beginPosition). bu yüzden, substring (cutPos), 's.substring (cutPos + 1, s.length()); ', daha iyi kullanmak' s.substring (cutPos + 1); 'yerine, substring (0, cutPos) –

+0

ile aynı değildir. – Mot

+0

@Yuri Bulkin, teşekkürler! Sorunumu çözdüm. –

17

Bu yapmalıdır: tek bağımsız değişkenle

String s = "How are you?"; 
String first = s.substring(0, s.length()/2); // gives "How ar" 
String second = s.substring(s.length()/2); // gives "e you?" 

(dize uzunluğu tekse, second nedeniyle tamsayı bölümünde yuvarlanmasına first birden fazla karaktere sahip olacağını unutmayın.)

5
String s0 = "How are you?"; 
String s1 = s0.subString(0, s0.length()/2); 
String s2 = s0.subString(s0.length()/2); 

Çok uzun s0 olmadığı için boş.

DÜZENLEME

ya indeksi 1 ekleyerek değildir gibi bu tek uzunluk dizeleri için çalışacaktır. Şaşırtıcı bir şekilde, sıfır uzunluğunda bir dizgede bile çalışır "".

4

Bir dizgiyi uzunluk olarak n öğelerine bölen bir yöntem. (Dize uzunluğu tam olarak n'a bölünemiyorsa, son öğe daha kısa olacaktır.)

public static String[] splitInEqualParts(final String s, final int n){ 
    if(s == null){ 
     return null; 
    } 
    final int strlen = s.length(); 
    if(strlen < n){ 
     // this could be handled differently 
     throw new IllegalArgumentException("String too short"); 
    } 
    final String[] arr = new String[n]; 
    final int tokensize = strlen/n + (strlen % n == 0 ? 0 : 1); 
    for(int i = 0; i < n; i++){ 
     arr[i] = 
      s.substring(i * tokensize, 
       Math.min((i + 1) * tokensize, strlen)); 
    } 
    return arr; 
} 

Testi kodu:

/** 
* Didn't use Arrays.toString() because I wanted to have quotes. 
*/ 
private static void printArray(final String[] arr){ 
    System.out.print("["); 
    boolean first = true; 
    for(final String item : arr){ 
     if(first) first = false; 
     else System.out.print(", "); 
     System.out.print("'" + item + "'"); 
    } 
    System.out.println("]"); 
} 

public static void main(final String[] args){ 

    printArray(splitInEqualParts("Hound dog", 2)); 
    printArray(splitInEqualParts("Love me tender", 3)); 
    printArray(splitInEqualParts("Jailhouse Rock", 4)); 

} 

Çıktı:

[ 'Hayri', 'köpek']
[ 'Aşk', 'beni te' , 'nder']
['Jail', 'hous', 'e Ro', 'ck']

+0

Ha, aslında bunu arıyordum. :) Çok tembel .. Teşekkürler! – milosmns

2

Hiçbir yerde bir yanıt bulamadım. Bu durumda java.lang.String yılında:

hep bakmak gereken ilk yer, söz konusu sınıf için javadocs yer almaktadır. Javadocs

  • muhtemelen Java IDE görüntülenebilir,
  • herhangi Güneş/Oracle Java SDK dağıtım dahildir, (örneğin http://download.oracle.com/javase/6/docs/api/ at) Oracle web sitesinden online olarak göz ve
  • edilebilir
  • ve bir Google araması kullanarak bulunabilir.
İlgili konular