文字列があり、文字列内の数字のシーケンス(のみ)を抽出したい。
例:helloThisIsA1234Sample。 1234が欲しい
数字のシーケンスが文字列内で一度だけ発生し、同じ位置では発生しないことは当然です。
(質問する人のために、サーバー名があり、その中から特定の番号を抽出する必要があります)
Apache commomnsのStringUtilsクラスを使用したいと思います。
ありがとう!
このコードを使用してくださいnumberOnlyには、目的の出力が含まれます。
String str="sdfvsdf68fsdfsf8999fsdf09";
String numberOnly= str.replaceAll("[^0-9]", "");
私はいつも Guava String utils またはこれらの種類の問題に類似したものを使うのが好きです:
String theDigits = CharMatcher.inRange('0', '9').retainFrom("abc12 3def"); // 123
1行だけ:
int value = Integer.parseInt(string.replaceAll("[^0-9]", ""));
Java.util.Scanner
を使用することもできます:
new Scanner(str).useDelimiter("[^\\d]+").nextInt()
next()
の代わりにnextInt()
を使用して、数字を文字列として取得できます。
Scanner
でhasNextInt()
を使用して、番号の存在を確認できます。
[^0-9]
などの正規表現を使用して、すべての非数字を削除します。
そこから、Integer.parseInt(String);
を使用するだけです
これを試して :
String s = "helloThisIsA1234Sample";
s = s.replaceAll("\\D+","");
つまり、出現するすべてのデジタル文字(0〜9)を空の文字列に置き換えます。
同じ問題に対して(追加の知識/情報として)JUnitテストクラスを作成しました。これが役立つことを願っています。
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;
}
}
JUnitテストケースは次のとおりです。
public class StringHelperTest {
StringHelper helper;
@Before
public void before(){
helper = new StringHelper();
}
@Test
public void testDrawDigitsFromString(){
assertEquals("187111", helper.drawDigitsFromString("TCS187TCS111"));
}
}
次の正規表現を使用できます。
string.split(/ /)[0].replace(/[^\d]/g, '')
str = str.replaceAll("\\D+","");
を使用できます
String line = "This order was32354 placed for QT ! OK?";
String regex = "[^\\d]+";
String[] str = line.split(regex);
System.out.println(str[1]);
記号があり、数字だけが必要な場合は、このアプローチを試してください。
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);
文字列を分割して、各文字と比較できます
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();
}
テストコード
@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"));
}
コンマで区切られている場合、またはコンマで区切られていない場合は、非常に単純なソリューション
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);
}