2017-02-21 6 views
1

文字列の数字部分から先行ゼロをすべて削除しようとしています。私はこのコードを思いついた(下記)。与えられた例からそれは働いた。しかし、最初に「0」を追加すると、適切な出力が得られません。誰もがこれを実現する方法を知っていますか?事前のおかげで文字列の数字部分から先行ゼロをすべて削除します。

入力:(2016)abc00701def00019z - >出力:(2016)abc701def19z - > resut:正しい

入力:0(2016)abc00701def00019z - >出力:(2016)abc71def19z - >結果:間違っ - >期待される出力:(2016)abc701def19z

EDIT:文字列は英語のアルファベット以外を含むことができます。

String localReference = "(2016)abc00701def00019z"; 
String localReference1 = localReference.replaceAll("[^0-9]+", " "); 
List<String> lists = Arrays.asList(localReference1.trim().split(" ")); 
System.out.println(lists.toString()); 
String[] replacedString = new String[5]; 
String[] searchedString = new String[5]; 
int counter = 0; 
for (String list : lists) { 
    String s = CharMatcher.is('0').trimLeadingFrom(list); 
    replacedString[counter] = s; 
    searchedString[counter++] = list; 

    System.out.println(String.format("Search: %s, replace: %s", list,s)); 
} 
System.out.println(StringUtils.replaceEach(localReference, searchedString, replacedString)); 
+0

私はそこに正規表現がありますが、すべての数字を取り出してintに変換することもできます。これにより、先行するすべてのゼロが削除されます。以前の値を新しいものに置き換えるだけで済みます – XtremeBaumer

+0

@XtremeBaumerこれは、intが保持するには大きすぎる非常に大きいシーケンスの場合には失敗します。 – Sentry

+0

@Sentryはわかりませんが、BigIntegerは先頭のゼロも削除します。 bigIntegerをオーバーロードする番号を含む文字列を持つことは疑いありません – XtremeBaumer

答えて

2
str.replaceAll("(^|[^0-9])0+", "$1"); 

+0

Greate。出来た。どうもありがとう –

0

Javaが起動ゼロのを削除し、その後任意のアルファベット以外の文字にマッチし、\ P {アルファ} +を持っています。

String stringToSearch = "0(2016)abc00701def00019z"; 
Pattern p1 = Pattern.compile("\\P{Alpha}+"); 
Matcher m = p1.matcher(stringToSearch); 
StringBuffer sb = new StringBuffer(); 
while(m.find()){ 
    m.appendReplacement(sb,m.group().replaceAll("\\b0+","")); 
} 
m.appendTail(sb); 
System.out.println(sb.toString()); 

output: 

(2016)abc701def19z 
+0

あなたの返事をありがとう。しかし、文字列に英字以外の文字が含まれていると、これは失敗します。 –

0

私はRegexを使用して作業を行い、あなたが与えた2つのテストケースに従って必要な作業を行うことができました。また、以下のコードの$ 1と$ 2は、前のRegexの()括弧内の部分です。

見つけてください以下のコード:これは数字以外の文字の後に、文字列の先頭にゼロの任意の行を削除し

public class Demo { 

     public static void main(String[] args) { 

      String str = "0(2016)abc00701def00019z"; 

/*Below line replaces all 0's which come after any a-z or A-Z and which have any number after them from 1-9. */ 
      str = str.replaceAll("([a-zA-Z]+)0+([1-9]+)", "$1$2"); 
      //Below line only replace the 0's coming in the start of the string 
      str = str.replaceAll("^0+",""); 
      System.out.println(str); 
     } 
    } 
+0

ご返信ありがとうございます。しかし、文字列に英字以外の文字が含まれていると、これは失敗します。 –

+0

他にどのような要素がありますか? – Mohit

+0

私は英語の代わりに中国語の文字を持っています –

関連する問題