Nomerdagi raqamdan keyin biror narsani olib tashlash

Androidda raqamdan keyin harflarni qanday o'chirish mumkin

Mening satrlarim bor deb o'ylayman

A1SS
A2SS
2SS
3SS
5SS

Mening chiqishim bo'lishi kerak

A1
A2
2
3
5
1
Bir nechta raqam bo'lishi mumkinmi? Hech qanday raqam bo'lmasligi mumkin va agar shunday bo'lsa, natijasi qanday bo'lishi kerak?
qo'shib qo'ydi muallif Ole V.V., manba
@CoDFather, men sizning sharhingizni spam qilmasangiz ham, sizning javobingizni topa olishi kerak deb o'ylayman. Shuningdek, sabr qiling. Ba'zida askar faqat bir necha soatdan keyin, bir kun yoki undan ko'p vaqt o'tgach, Stack Overflow ga qaytadi. Rahmat.
qo'shib qo'ydi muallif Ole V.V., manba
O'ylaymanki, Java-da Android emas!
qo'shib qo'ydi muallif Atef Hares, manba
@DineshReddy mening javob berishni tekshirib turing Sizning barcha holatlaringiz uchun buni qildim
qo'shib qo'ydi muallif Kiran Benny Joseph, manba
@DineshReddy Iltimos, kodiga qarang
qo'shib qo'ydi muallif Kiran Benny Joseph, manba
Menimcha, @DineshReddy barcha muammolarini izohlamadi. Ehtimol, satrda bir nechta raqam bo'lishi mumkin, shuning uchun muammo uchun kutilgan natija oxirgi raqamli yoki faqat birinchi raqamli satr.
qo'shib qo'ydi muallif Oghli, manba
Androidda uning java
qo'shib qo'ydi muallif Dinesh Reddy, manba

10 javoblar

Bu sizga yordam berishi mumkin deb o'ylayman.

String value = your_string.replaceAll("[^0-9]","");
1
qo'shib qo'ydi

Buning uchun dan foydalaning.

UPDATE case AA22S to AA22. Thanks @meo_3_the.

Misol uchun:

    String s = "A1SS";
    StringBuilder newStr = new StringBuilder("");
    boolean detected = false;
    for (int i = 0; i < s.length(); i++) {
        if (s.charAt(i) >= '0' && s.charAt(i) <= '9'){
            newStr.append(s.charAt(i));
            detected = true;
        }else{
            if (!detected)
                newStr.append(s.charAt(i));
            else
                break;
        }
    }

Result String: newStr.toString();

1
qo'shib qo'ydi

oddiy usul:

         String input="mhd60oug",result;
         int LastDigitid = -1;
       for(int i=0; i < input.length(); i++){
           char c = input.charAt(i);
           if(Character.isDigit(c)){
               LastDigitid = i;
           }
       }
       if(LastDigitid != -1){
          result = input.substring(0,LastDigitid+1);
       }
       else{
           result = input;
       }
       System.out.println(result);

update :

bu yo'l faqatgina Stringdagi so'nggi raqamdan keyin ishlaydi. Asker o'z muammosida o'zi xohlagan ishni to'liq izohlamadi.

bir necha asosiy holatlar mavjud:

  1. String with more than one number like A1SS23BD:

Bu holatda A1 yoki A1SS23 kerakli natija aniqlanadi?

  1. String with only one number like 2SS
  2. String that doesn't contain any number like ASS
  3. String with only a number like 23
1
qo'shib qo'ydi
Asosiy usul - ishni bajaradigan Character.isDigit (char).
qo'shib qo'ydi muallif Murtuza Khan, manba

Agar kirish AB22CD bo'lsa, siz natijani AB22 yoki faqat AB2 bo'lishini xohlaysiz.
Tahrir: shuning uchun siz ushbu kodni ishlatishingiz mumkin:

public String removeCharactersAfterNumber(String input) {
    int index;
    for (index = 0; index < input.length(); index++) {
        if (input.charAt(index)  >= '0' && input.charAt(index) <= '9'){
            break;
        }
    }
    while (input.charAt(index)  >= '0' && input.charAt(index) <= '9') index++;
    return input.substring(0, index);
}
1
qo'shib qo'ydi
agar sharhingiz bo'lsa, savol ostida sharhlar bo'limi bor!
qo'shib qo'ydi muallif Atef Hares, manba
Izohni kiriting cái án phốt luôn: v
qo'shib qo'ydi muallif TruongHieu, manba
@AtefHares sharh uchun etarlicha e'tirof etmaydi, ser
qo'shib qo'ydi muallif Meo_3_the, manba
Men natijani AB22 sifatida istayman
qo'shib qo'ydi muallif Dinesh Reddy, manba

Men muntazam ifodani ishlatish eng oddiy (regex yoki do'stlar orasidagi regexp) deb o'ylayman:

private static final Pattern PAT_UNTIL_NUMBER = Pattern.compile("^[^0-9]*[0-9]+");

public static String removeCharsAfterNumber(String stringWithNumber) {
    Matcher m = PAT_UNTIL_NUMBER.matcher(stringWithNumber);
    if (m.find()) {
        return m.group();
    } else {
        throw new IllegalArgumentException("No number in string " + stringWithNumber);
       //or depending on requirements, may just return stringWithNumber
    }
}

Savolingizdagi satrlarni hisobga olgan holda, ushbu usul siz so'ragan mahsulotni ishlab chiqaradi. Sizning raqamingiz bir nechta raqamdan iborat bo'lishi mumkinligini inobatga oladi. Masalan, A27B kodi A27 bo'ladi. Bir nechta raqam bo'lsa, masalan, A7B4SS kodi A7 bo'lsa, birinchi raqamdan keyin kesiladi. Turli xulqni xohlasangiz, muntazam ifodani sizning talablaringizga o'zgartirish qiyin emas.

Bu erda regexps asoslarini tushuntirmayman. U erda ba'zi bir o'quv qo'llanmalari bor, qidiruv tizimidan foydalaning. Albatta, siz kodda nimalar sodir bo'layotganini tushunishni xohlaysiz.

Agar biror sababga ko'ra yoki boshqasiga siz regexpdan foydalanishni istamasangiz yoki xohlamasangiz, boshqa javoblardan ayrimlari dasturiy ta'minotni qanday hal qilish kerakligini ko'rsatadi. Yaxshi o'lchov uchun mening versiyam. Umid qilamanki, sharhlar nima yuz berishini tushuntiradi va men buni oddiy va oddiy deb hisoblayman.

    int index = 0;
   //find the number
    while (index < stringWithNumber.length() && ! Character.isDigit(stringWithNumber.charAt(index))) {
        index++;
    }
    if (index == stringWithNumber.length()) {//no number found
        throw new IllegalArgumentException("No number in string " + stringWithNumber);
    }
   //find end of number
    while (index < stringWithNumber.length() && Character.isDigit(stringWithNumber.charAt(index))) {
        index++;
    }
    return stringWithNumber.substring(0, index);
0
qo'shib qo'ydi

1) You can use regex to achieve your need or iterate on the String to compute the end index on which you could perform a substring.

2) Sizning misollarda siz bir qator raqamdan keyin Stringni qisqartirgan vaziyatlarni ko'rsatib berolmaysiz.
Men sizlarga har ikkala echimni ko'rsataman

3) With iteration over the String, the general idea is : either the searched pattern was not detected, so you return the original string, either it it was detected, you return the substring associated to.

Bu erda har bir ish uchun bitta usulni va misol o'rnini egallagan sinf mavjud:

public class TruncateStringAfterDigit {

    public static void main(String[] args) {

        String s = "ba123";

        String valueTrimedAfterDigits = getValueTrimedAfterDigits(s);
        System.out.println(valueTrimedAfterDigits);

        String valueTrimedAfterDigit = getValueTrimedAfterOneDigit(s);
        System.out.println(valueTrimedAfterDigit);
    }

    private static String getValueTrimedAfterDigits(String s) {

        boolean isAtLeastANumberFound = false;

        for (int i = 0; i < s.length(); i++) {

            if (Character.isDigit(s.charAt(i))) {
                isAtLeastANumberFound = true;
            }

            else if (isAtLeastANumberFound) {
                return s.substring(0, i+1);
            }
        }

        return s;
    }

    private static String getValueTrimedAfterOneDigit(String s) {

        for (int i = 0; i < s.length(); i++) {

            if (Character.isDigit(s.charAt(i))) {
                return s.substring(0, i + 1);
            }
        }

        return s;
    }
}

Ko'rsatilgan chiqish:

ba123

     

ba1

0
qo'shib qo'ydi

Urunib ko'r

output = output.replaceAll("[^\\d]*$", "");

[^\d]*$ - this regex deletes all symbols after the last number

DEMO

0
qo'shib qo'ydi
Ushbu kod javobga javob berishi mumkin bo'lsa-da, savolning qanday va/yoki nima sababdan hal qilinayotganiga doir qo'shimcha kontekstni berish javobning uzoq muddatli qiymatini yaxshilashga olib keladi.
qo'shib qo'ydi muallif Donald Duck, manba
regexp naqshini tushuntirish yaxshi fikr edi
qo'shib qo'ydi muallif aalmiray, manba

Simple way: More faster than other ways

public String getData(String val){
        String dat =val;
        boolean intFound=false;
        for (int i=0; i < val.length(); i++) {
            char c = val.charAt(i);
            if (Character.isDigit(c)) {
                dat = val.substring(0, i + 1);
                intFound = true;
            } else if (intFound) {
                break;
            }
        }
        return dat;
    }

Yuqoridagi usuldan foydalaning va

String data=getData("A1SS");

soddalik

u sizning barcha holatlaringizda ishlaydi

  • "A434AS" RETURNS "A434"
  • "3FG" RETURNS "3" .

  • "ERT45" RETURNS "ERT45" .

  • "SDF34DFG2" RETURNS "SDF34" OLE V.ga rahmat.

Logic:

  1. passing string to method.
  2. Detecting integer position in String
  3. Ignoring another charecter which comes after integer
  4. returning substring to that position

Janob Rabbit uchun rahmat

0
qo'shib qo'ydi
Agar bir nechta raqam bo'lishi kerak bo'lsa, siz faqat oxirgi bo'lgandan keyin kesilgan ko'rinasiz. Q2E5U kodi Q2E5 beradi. Bu o'rinli bo'lishi mumkin emas.
qo'shib qo'ydi muallif Ole V.V., manba
1-o'rin - raqam emas, shuning uchun butun Stringni qaytarasiz. Notog'ri javob.
qo'shib qo'ydi muallif TruongHieu, manba
@ OleV.V. taklif uchun rahmat. Endi men buni o'tkazdim
qo'shib qo'ydi muallif Kiran Benny Joseph, manba
@TruongHieu hozirgi kunga qadar mukammaldir
qo'shib qo'ydi muallif Kiran Benny Joseph, manba
Men faqat yozgan birinchi @TruongHieu
qo'shib qo'ydi muallif Kiran Benny Joseph, manba

Quyidagi usuldan foydalanishingiz mumkin, bu barcha hollarda ishlaydi.

    public String getModifiedString(String string) {
        String modifiedString = "";

        for(int index = 0; index < string.length(); index++) {
            char currentChar = string.charAt(index);
            if(Character.isLetter(currentChar)) {
                modifiedString += currentChar;
            } else if(Character.isDigit(currentChar)) {
                modifiedString += currentChar;

                for(int digitIndex = index+1; digitIndex < string.length(); digitIndex++) {
                    if(Character.isDigit(string.charAt(digitIndex))) {
                        modifiedString += string.charAt(digitIndex);
                    }
                }

                return modifiedString;
            }
        }

        return modifiedString;
    }

Kodni pastda qo'yib, uni sinab ko'rishingiz mumkin.

String[] stringArray = new String[]{"A1SS", "A2SS", "2SS", "AA222SS", "AN33"};
Log.d("---SO", " str 1: " + getModifiedString(stringArray[0]));
Log.d("---SO", " str 2: " + getModifiedString(stringArray[1]));
Log.d("---SO", " str 3: " + getModifiedString(stringArray[2]));
Log.d("---SO", " str 4: " + getModifiedString(stringArray[3]));
Log.d("---SO", " str 5: " + getModifiedString(stringArray[4]));
0
qo'shib qo'ydi

chiqish deb nomlangan o'zgaruvchida qiymati olasiz deb taxmin qilaylik.

Stringdagi bitta SS ni olib tashlash uchun siz uni o'zgartirishingiz mumkin

output = output.replace("SS", "");

Yoki stringda birdan ortiq SS ni olib tashlashingiz kerak bo'lsa, replaceAll foydalanishingiz mumkin

output = output.replaceAll("SS", "");
0
qo'shib qo'ydi
Ha. Kamchilik uchun kechirim so'rayman. Buning to'g'ri javob ekanini tushunib etdim. Yaxshiyamki, bu kichik ko'lamli vaziyatga yordam beradi, barcha holatlar emas.
qo'shib qo'ydi muallif TruongHieu, manba
nima sababdan ovoz berish kerak? Savolga ko'ra, u to'g'ri javob.
qo'shib qo'ydi muallif Asutosh Panda, manba
savolga ko'ra, u kichik bir qator ishi bor va barcha holatlar haqida gapirmagan. Shuning uchun men savolga sodiq qolishga harakat qildim. Muammo yo'q. Rahmat.
qo'shib qo'ydi muallif Asutosh Panda, manba