2016-04-10 13 views
-2

Bu tür bir dizideki sayıyı nasıl değiştirebilirim ve ikinci bölümü (varsa) nasıl silebilirim bilen var mı?Android - Bu dizekteki sayıyı nasıl değiştirebilirim?

Bu sesi garip biliyorum, açıklamama izin verin. 9999999999 (aynı zamanda sıfır 0000000000 olabilir: kadar 0:

numarası (ı yerine gerekenleri) dan, 10 basamak 1 haneli yukarısı olabilir:

başa dize her zaman farklıdır). X0000, a00, h000000, G000:

daima numaradan önce bir karakter gibi, (herhangi bir karakter, herhangi bir durumda olabilir) sahiptir. X000-X00000, X0000-X00, X00-X0:

Bazen gibi (I varsa bu bölümü kaldırmak gerekir, tire ile başlar) onu izleyen başka bir bölümüne sahip olabilir. X00000-X, X0000-X000-X, a000-h, g00000-j00-Y:

Bazen onu izleyen başka ekstra bir karaktere sahip olabilir gibi, (herhangi bir karakter, herhangi bir durum olabilir, tire ile başlar, ben varsa bu bölümü tutmak gerekir).

I (varsa) (varsa) ikinci bölümünü silmek, ilk bölümü nasıl değiştirileceği biliyorum ve bu neye ihtiyacım örneğidir (varsa) son bölümünü tutmuyorum:

X0000 > X1234 
a00 > a12 
h000000 > h123456 
G000 > G123 

X000-X000000 > X123 - replace the first and delete the last 
X0000-X000 > X1234 - replace the first and delete the last 
X00-X00 > X12 - replace the first and delete the last 

X00000-X > X12345-X - replace only the first and keep the last 
a000-h > a123-h - replace it and keep the last 

X0000-X000-X > X1234-X - replace the first, delete the second and keep the last 
g00000-j00-Y > g12345-Y - replace the first, delete the second and keep the last 

Bu örnekte çoğunlukla 0 ve X kullanmıştım, ama açıklandığı gibi 0 veya herhangi bir sayı olabilir ve X veya herhangi bir karakter (büyük veya küçük harf) olabilir.

DÜZENLEME: bahsetmeyi unutmuşum, bu sayıyı almalı, onunla bir matematik yapmalı ve değiştirmeliyim, sadece değiştirilmemeli.

Bunu nasıl yapacağını bilen var mı? Çok teşekkürler.

+1

normal ifadeleri kullanmaya başlamanız gerekiyor – Pooya

+0

Sorumu düzenledim, son bölümü, normal ifadeleri kullanarak nasıl yapılacağına dair herhangi bir fikirden bahsetmeyi unuttum? Teşekkürler. – Minion

+1

bu eğiticileri kontrol edin: http://www.tutorialspoint.com/java/java_regular_expressions.htm, http://www.vogella.com/tutorials/JavaRegularExpressions/article.html – Pooya

cevap

2

bir yolu replace() kullanarak bunu yapmak için olup aşağıdaki gibidir substring() geçerli:

public static void main (String[] args) throws Exception { 
    String input = "X000-X"; 
    String replacement = "123"; 
    int ls = input.lastIndexOf("-"); 
    int fs = input.indexOf("-"); 
    System.out.println("Extracted Number: " + (fs < 1 ? input.substring(1) : 
                 input.substring(1,fs))); 
    System.out.println("Final Output: " + input.substring(0,1) + replacement + 
         (ls != fs || fs == input.length() - 2 ? input.substring(ls) : "")); 
} 

Çıktı:

Extracted Number: 000 
Final Output: X123-X 
+0

soru, bu dizeden sayıların nasıl okunacağıdır. Çok – Pooya

+0

X000-X ve X000 gibi bir dizeyle de çalışır mı? – Minion

+0

@Minion Evet, yukarıda verdiğiniz tüm durumlarda çalışacaktır. – user2004685

2

Ben sadece birinin size örnek vereyim, Ve takip edebilirsiniz gereksinimlerle aynıysa VEYA bazı satırları gereksinimlerinize uygun olarak ayrı ayrı yöntemlere ayırabilirsiniz,

String value = "X000-X000000"; 
    if(value.contains("-")){ 
     String match=""; 
     String[] elements = value.split("-"); 

     Pattern pattern = Pattern.compile("[0-9]+"); 
     Matcher matcher = pattern.matcher(elements[0]); //For the first element that is X000 

     while (matcher.find()) { 
      match = matcher.group(); //Numeric is match that is 000 
     } 

    //Do whatever you want to do with 000 here like I replaced 123 here 

    elements[0] = elements[0].replace(match, String.valueOf(123)); 
     StringBuilder builder = new StringBuilder(); 
     for(String s : elements) { 
      builder.append(s + "-"); 
     } 
     value = builder.toString().substring(0,builder.length()-1); //Your final value that can be returned as well 


    } 
+0

İkinci kısmı silmez. Örneğin, 'X000-X000000', X123-X000000 gibi bir şey ve beklendiği gibi sadece X123'ü değil. Belki çözümü çözebilirsin. – user2004685

+1

@ user2004685 yah. Onun gereksinimleri çok büyük ve bazen silmek istediği zaman, Bazen yok. Ancak, belirli öğeleri, ayrılan öğeler dizisinde "" (boş) olarak değiştirerek kolayca silebilir. Ya da sadece ilk kısımları sadece 'elementler [0]' ile kullanmak istiyorsa, aynı zamanda gereksinimleri de yerine getirir. Hepsi şartlara dayanıyor. Ve önerdiğiniz için çok teşekkür ederim, bunu takdir ediyorum. –

+0

Evet, haklısınız. – user2004685

İlgili konular