2011-12-16 8 views
7

Ho un semplice compito java. Ho bisogno di determinare se una stringa inizia con la lettera da A a I. So che devo usare string.startsWith(); ma non voglio scrivere, if(string.startsWith("a")); fino a me, sembra efficiente. Dovrei usare un ciclo di qualche tipo?Determina se la stringa inizia con le lettere dalla A alla I

+0

Maiuscolo? Minuscolo? O? –

+0

Se devi abbinare caratteri maiuscoli e minuscoli, controlla il mio post. Mark Byers corrisponde solo a lettere maiuscole e abbiamo alcuni post che corrispondono a lettere minuscole, basta sceglierne uno (e aggiorna la tua domanda per chiarire quale è quello che vuoi). –

risposta

2
if (string.charAt(0) >= 'A' && string.charAt(0) <= 'I') 
{ 
} 

dovrebbe farlo

26

Non hai bisogno di espressioni regolari per questo.

Prova questa, supponendo che si desidera maiuscolo solo:

char c = string.charAt(0); 
if (c >= 'A' && c <= 'I') { ... } 

se si vuole una soluzione regex tuttavia, è possibile utilizzare questo (ideone):

if (string.matches("^[A-I].*$")) { ... } 
+0

Ok, questo ha funzionato. ma cosa significa esattamente il ^, e. * $ significa? So che [a-i] significa a through i – Archey

+0

intendo dire, sto chiedendo cosa significa^e. * $, E perché ne ho bisogno. Mi piace capire tutto, dato che non abbiamo ancora imparato questo nel mio corso di informatica, – Archey

+2

@Archey. Il mezzo inizia con la stringa, il. indica qualsiasi carattere, * indica un numero qualsiasi di volte e $ è una fine riga. Quindi, fondamentalmente l'inizio della linea seguito da A-I seguito da qualsiasi carattere 0 o più volte fino alla fine della riga. –

1

Prova

string.charAt(0) >= 'a' && string.charAt(0) <= 'j' 
1
char c=string.toLowerCase().charAt(0); 
if(c >= 'a' && c <= 'i') 
    ... 

Questo rende è facile estrarlo come metodo:

public static boolean startsBetween(String s, char lowest, char highest) { 
    char c=s.charAt(0); 
    c=Character.toLowerCase(c); //thx refp 
    return c >= lowest && c <= highest; 
} 

che è ALTAMENTE preferito a qualsiasi soluzione in linea. Per la vittoria, taggalo come finale in modo che java lo in-linea per te e ti offre prestazioni migliori di una soluzione in-linea codificata pure.

+0

non dovresti essere in minuscolo l'intera stringa, controlla come ho risolto nel mio post, si, lo so; ottimizzazione prematura ;-) –

+0

Hai ragione, copia anche il tutto. Finché è diviso in un metodo, potrebbe anche fare il passo per scomporlo nella sua stessa variabile. –

2

Che ne dici di questo per brevità?

if (0 <= "ABCDEFGHI".indexOf(string.charAt(0))) { 
    // string starts with a character between 'A' and 'I' inclusive 
} 
+2

Il commento non corrisponde al codice ;-) –

+0

@Roger; corretto :-) – rsp

+0

Ragionevole, ora mettilo in un metodo e imposta i parametri A e I. –

0

se (string.toUpperCase(). CharAt (0)> = 'A' & & string.toUpperCase(). CharAt (0) < = 'I')

dovrebbe essere il più semplice versione ...

Problemi correlati