dizesinde dize dışında "ali123hgj" gibi bir şey var. Tam sayı 123 olmak istiyorum. java'da nasıl yapabilirim?java
java
cevap
aşağıdaki Normİfd kullanın (http://java.sun.com/docs/books/tutorial/essential/regex/ bakınız):
\d+
Tarafından:
final Pattern pattern = Pattern.compile("\\d+"); // the regex
final Matcher matcher = pattern.matcher("ali123hgj"); // your string
final ArrayList<Integer> ints = new ArrayList<Integer>(); // results
while (matcher.find()) { // for each match
ints.add(Integer.parseInt(matcher.group())); // convert to int
}
int i = Integer.parseInt("blah123yeah4yeah".replaceAll("\\D", ""));
// i == 1234
Not Bu arada bir sayıya dizeleri farklı bölgelerinden gelen rakamları "birleştirme" nasıl . Yine de sadece bir numara varsa, o zaman bu hala çalışır. regex biraz daha karmaşıktır
int i = Integer.parseInt("x-42x100x".replaceAll("^\\D*?(-?\\d+).*$", "$1"));
// i == -42
, ama temelde opsiyonel (içerdiği hane ilk dizisi ile tüm dizeyi yerine geçer: sadece ilk sayı istiyorsanız, o zaman böyle bir şey yapabilir eksi işareti), tamsayı olarak ayrıştırmak için Integer.parseInt
kullanmadan önce.
Muhtemelen bu satırlar boyunca yapabileceğini:
Pattern pattern = Pattern.compile("[^0-9]*([0-9]*)[^0-9]*");
Matcher matcher = pattern.matcher("ali123hgj");
boolean matchFound = matcher.find();
if (matchFound) {
System.out.println(Integer.parseInt(matcher.group(0)));
}
O da birden fazla sayı gruba kolayca adapte var. Kod sadece yönelim içindir: test edilmemiştir.
int index = -1;
for (int i = 0; i < str.length(); i++) {
if (Character.isDigit(str.charAt(i)) {
index = i; // found a digit
break;
}
}
if (index >= 0) {
int value = String.parseInt(str.substring(index)); // parseInt ignores anything after the number
} else {
// doesn't contain int...
}
public static final List<Integer> scanIntegers2(final String source) {
final ArrayList<Integer> result = new ArrayList<Integer>();
// in real life define this as a static member of the class.
// defining integers -123, 12 etc as matches.
final Pattern integerPattern = Pattern.compile("(\\-?\\d+)");
final Matcher matched = integerPattern.matcher(source);
while (matched.find()) {
result.add(Integer.valueOf(matched.group()));
}
return result;
Girdi "asg123d ddhd-2222-33sds --- --- 222 p --- 234 33dd" Bu çıktıda sonuçları [123, -2222, -33, -222, - 33, 234]
Bu, Google Guava #CharMatcher Way'dir.
yalnızca ASCII basamak maç için önem veriyorsanız
, sadece Latin alfabesinin harflerini maç için önem veriyorsanız,String alphanumeric = "12ABC34def"; String digits = CharMatcher.JAVA_DIGIT.retainFrom(alphanumeric); // 1234 String letters = CharMatcher.JAVA_LETTER.retainFrom(alphanumeric); // ABCdef
String digits = CharMatcher.inRange('0', '9').retainFrom(alphanumeric); // 1234
kullanmak kullanmak
String letters = CharMatcher.inRange('a', 'z')
.or(inRange('A', 'Z')).retainFrom(alphanumeric); // ABCdef
"abc123def567ghi" veya "abcdef" yi ne dersiniz? – kennytm
Numaradan önce 3 karakteriniz var mı, yoksa sadece bir örnek mi? – lbedogni
sadece üç karakter değil. 0 veya daha fazla karakter arasında sayıdır. "123", "sdfs", "123fdhf", "fgdkjhgf123" olabilir –