2015-08-27 16 views
5
public static String removeLeadingZeroes(String value): 

Dato un input valido, non vuoto, il metodo deve restituire l'input con tutti gli zeri iniziali rimossi. Pertanto, se l'input è "0003605", il metodo dovrebbe restituire "3605". Come caso speciale, quando l'ingresso contiene solo zeri (come “000” o “0000000”), il metodo deve restituire “0”Rimuovere lo zero iniziale in Java

public class NumberSystemService { 
/** 
* 
* Precondition: value is purely numeric 
* @param value 
* @return the value with leading zeroes removed. 
* Should return "0" for input being "" or containing all zeroes 
*/ 
public static String removeLeadingZeroes(String value) { 
    while (value.indexOf("0")==0) 
     value = value.substring(1); 
      return value; 
} 

non so come scrivere i codici per una stringa " 0000" .

+6

Questo thread dovrebbe rispondere alla tua domanda: http://stackoverflow.com/questions/2800739/how-to-remove-leading-zeros-from-alphanumeric-text – alien01

+0

Aggiungi un 'dichiarazione if' a cercare quel condizione. (all'inizio del ciclo 'while') – dsh

risposta

1

vorrei prendere in considerazione il controllo per questo caso prima. Passa attraverso il carattere stringa per carattere controllando un carattere non "0". Se vedi un carattere non "0" usa il processo che hai. In caso contrario, restituire "0". Ecco come lo farei (non testato, ma chiuso)

boolean allZero = true; 
for (int i=0;i<value.length() && allZero;i++) 
{ 
    if (value.charAt(i)!='0') 
     allZero = false; 
} 
if (allZero) 
    return "0" 
...The code you already have 
+0

Usando 'if (s.matches ("^0 + $ "))' sarebbe molto più semplice. – TNT

+0

Buon punto, ma vorrei usare '"^0 * $ "' per soddisfare il caso di stringa vuoto menzionato in "Dovrebbe restituire" 0 "perché l'input sia" "o che contenga tutti gli zeri," giusto? –

+0

* "Dato un input valido, non vuoto" *? : P – TNT

1

Si potrebbe aggiungere un controllo sulla lunghezza della stringa:

public static String removeLeadingZeroes(String value) { 
    while (value.length() > 1 && value.indexOf("0")==0) 
     value = value.substring(1); 
     return value; 
} 
22

Se la stringa contiene sempre un numero intero valido il return new Integer(value).toString(); è il più facile.

public static String removeLeadingZeroes(String value) { 
    return new Integer(value).toString(); 
} 
+0

dice numerico, quindi forse" 0000.1 "potrebbe essere una voce, ma mi piace la tua risposta. –

0

È possibile utilizzare lo schema di ricerca per verificare le stringhe con soli zero.

public static String removeLeadingZeroes(String value) { 
    if (Pattern.matches("[0]+", value)) { 
     return "0"; 
    } else { 
     while (value.indexOf("0") == 0) { 
      value = value.substring(1); 
     } 
     return value; 
    } 
} 
+0

Potrebbe funzionare, ma quando provo ad eseguire i tuoi codici, Java dice che Pattern non può essere risolto. Un altro problema è che non ho ancora imparato "Pattern", quindi probabilmente non lo uso :). – DataJ

+0

@Claes Potresti condividere più dettagli dell'errore per favore. Funziona bene per me. –

0

si può provare questo:
1. Se il valore numerico della stringa è 0 allora tornare new String ("0").
2. Altrimenti rimuovere gli zeri dalla stringa e restituire la sottostringa.

public static String removeLeadingZeroes(String str) 
{ 
    if(Double.parseDouble(str)==0) 
     return new String("0"); 
    else 
    { 
     int i=0; 
     for(i=0; i<str.length(); i++) 
     { 
      if(str.charAt(i)!='0') 
       break; 
     } 
     return str.substring(i, str.length()); 
    } 
} 
1
private String trimLeadingZeroes(inputStringWithZeroes){ 
    final Integer trimZeroes = Integer.parseInt(inputStringWithZeroes); 
    return trimZeroes.toString(); 
} 
+0

Benvenuti in Stack Overflow! Sebbene questo snippet di codice possa risolvere la domanda, [compresa una spiegazione] (http://meta.stackexchange.com/questions/114762/explaining-entely-code-based-answers) aiuta davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro, e queste persone potrebbero non conoscere le ragioni del tuo suggerimento sul codice. [Dalla recensione] (https://stackoverflow.com/review/low-quality-posts/15057352) – Ferrybig

0

Usa String.replaceAll(), in questo modo:

public String replaceLeadingZeros(String s) { 
     s = s.replaceAll("^[0]+", ""); 
     if (s.equals("")) { 
      return "0"; 
     } 

     return s; 
    } 

Questo corrisponderà tutti gli zeri iniziali (utilizzando regex^[0] +) e li sostituirà con spazi vuoti. Alla fine, se ti rimane solo una stringa vuota, restituisci "0".

Problemi correlati