Ik heb een string en ik wil de (enige) reeks cijfers in de string extraheren.
Voorbeeld:
halloThisIsA1234Sample.
Ik wil de 1234
Het is een gegeven dat de reeks cijfers slechts één keer voorkomt binnen de tekenreeks, maar niet op dezelfde positie.
(voor degenen die ernaar vragen, ik heb een servernaam en moet daar een specifiek nummer uithalen)
Ik wil graag de StringUtils-klasse van Apache-commomns gebruiken.
Bedankt!
Antwoord 1, autoriteit 100%
Gebruik dit codenummerAlleen bevat de gewenste uitvoer.
String str="sdfvsdf68fsdfsf8999fsdf09";
String numberOnly= str.replaceAll("[^0-9]", "");
Antwoord 2, autoriteit 20%
Ik gebruik altijd graag Guava String-hulpprogramma’sof iets dergelijks voor dit soort aantal problemen:
String theDigits = CharMatcher.inRange('0', '9').retainFrom("abc12 3def"); // 123
Antwoord 3, autoriteit 14%
Slechts één regel:
int value = Integer.parseInt(string.replaceAll("[^0-9]", ""));
Antwoord 4, autoriteit 7%
U kunt ook java.util.Scanner
gebruiken:
new Scanner(str).useDelimiter("[^\\d]+").nextInt()
Je kunt next()
gebruiken in plaats van nextInt()
om de cijfers als een String
te krijgen. Merk op dat het aanroepen van Integer.parseInt
op het resultaat vele malen snellerkan zijn dan het bellen met nextInt()
.
U kunt de aanwezigheid van een nummer controleren met hasNextInt()
op de Scanner
.
Antwoord 5, autoriteit 4%
Gebruik een regex zoals [^0-9]
om alle niet-cijfers te verwijderen.
Gebruik vanaf daar gewoon Integer.parseInt(String);
Antwoord 6, autoriteit 2%
probeer dit:
String s = "helloThisIsA1234Sample";
s = s.replaceAll("\\D+","");
Dit betekent: vervang alle exemplaren van digitale karakters (0 -9) door een lege string !
Antwoord 7, autoriteit 2%
Guava’s CharMatcher
klasse extraheert Integer
s uit een String
.
String text="Hello1010";
System.out.println(CharMatcher.digit().retainFrom(text));
Opbrengsten:
1010
Antwoord 8, autoriteit 2%
Ik heb een JUnit Test-klasse gemaakt (als aanvullende kennis/info) voor hetzelfde probleem. Ik hoop dat je hier wat aan hebt.
public class StringHelper {
//Separate words from String which has gigits
public String drawDigitsFromString(String strValue){
String str = strValue.trim();
String digits="";
for (int i = 0; i < str.length(); i++) {
char chrs = str.charAt(i);
if (Character.isDigit(chrs))
digits = digits+chrs;
}
return digits;
}
}
En JUnit Testcase is:
public class StringHelperTest {
StringHelper helper;
@Before
public void before(){
helper = new StringHelper();
}
@Test
public void testDrawDigitsFromString(){
assertEquals("187111", helper.drawDigitsFromString("TCS187TCS111"));
}
}
Antwoord 9
U kunt de volgende reguliere expressie gebruiken.
string.split(/ /)[0].replace(/[^\d]/g, '')
Antwoord 10
String line = "This order was32354 placed for QT ! OK?";
String regex = "[^\\d]+";
String[] str = line.split(regex);
System.out.println(str[1]);
Antwoord 11
U kunt str = str.replaceAll("\\D+","");
Antwoord 12
U kunt de tekenreeks splitsen en vergelijken met elk teken
public static String extractNumberFromString(String source) {
StringBuilder result = new StringBuilder(100);
for (char ch : source.toCharArray()) {
if (ch >= '0' && ch <= '9') {
result.append(ch);
}
}
return result.toString();
}
Testcode
@Test
public void test_extractNumberFromString() {
String numberString = NumberUtil.extractNumberFromString("+61 415 987 636");
assertThat(numberString, equalTo("61415987636"));
numberString = NumberUtil.extractNumberFromString("(02)9295-987-636");
assertThat(numberString, equalTo("029295987636"));
numberString = NumberUtil.extractNumberFromString("(02)~!@#$%^&*()+_<>?,.:';9295-{}[=]987-636");
assertThat(numberString, equalTo("029295987636"));
}
Antwoord 13
Probeer deze benadering als u symbolen hebt en u wilt alleen nummers:
String s = "@##9823l;Azad9927##$)(^738#";
System.out.println(s=s.replaceAll("[^0-9]", ""));
StringTokenizer tok = new StringTokenizer(s,"`~!@#$%^&*()-_+=\\.,><?");
String s1 = "";
while(tok.hasMoreTokens()){
s1+= tok.nextToken();
}
System.out.println(s1);
Antwoord 14
Een zeer eenvoudige oplossing, indien gescheiden door komma of indien niet gescheiden door komma
public static void main(String[] args) {
String input = "a,1,b,2,c,3,d,4";
input = input.replaceAll(",", "");
String alpha ="";
String num = "";
char[] c_arr = input.toCharArray();
for(char c: c_arr) {
if(Character.isDigit(c)) {
alpha = alpha + c;
}
else {
num = num+c;
}
}
System.out.println("Alphabet: "+ alpha);
System.out.println("num: "+ num);
}
Antwoord 15
Uitbreiding van het beste antwoord voor het vinden van drijvende puntennummers
String str="2.53GHz";
String decimal_values= str.replaceAll("[^0-9\\.]", "");
System.out.println(decimal_values);
Antwoord 16
`String s="as234dfd423";
for(int i=0;i<s.length();i++)
{
char c=s.charAt(i);``
char d=s.charAt(i);
if ('a' <= c && c <= 'z')
System.out.println("String:-"+c);
else if ('0' <= d && d <= '9')
System.out.println("number:-"+d);
}
Uitgang: –
number:-4
number:-3
number:-4
String:-d
String:-f
String:-d
number:-2
number:-3
Antwoord 17
U kunt dit proberen:
String str="java123java456";
String out="";
for(int i=0;i<str.length();i++)
{
int a=str.codePointAt(i);
if(a>=49&&a<=57)
{
out=out+str.charAt(i);
}
}
System.out.println(out);
Antwoord 18
Eenvoudige Python-code voor het scheiden van de cijfers in string
s="rollnumber99mixedin447"
list(filter(lambda c: c >= '0' and c <= '9', [x for x in s]))