У меня есть входы вроде
AS23456SDE
MFD324FR
Мне нужно получить значения первого символа, например
AS, MFD
нельзя изменить ввод первых двух или первых трех символов . Перед числом необходимо указать первые символы .
Спасибо.
Изменить: это то, что я пробовал.
public static String getPrefix(String serial) {
StringBuilder prefix = new StringBuilder();
for(char c : serial.toCharArray()){
if(Character.isDigit(c)){
break;
}
else{
prefix.append(c);
}
}
return prefix.toString();
}
5 ответов
Я думаю, что это можно сделать с помощью простого регулярного выражения, которое соответствует цифрам и java функция разделения строк. Этот подход, основанный на регулярных выражениях, будет более эффективным, чем методы, использующие более сложные регулярные выражения.
Что-то вроде ниже будет работать
String inp = "ABC345.";
String beginningChars = inp.split("[\\d]+",2)[0];
System.out.println(beginningChars); // only if you want to print.
Регулярное выражение, которое я использовал "[\\d]+"
, уже экранировано для java.
Что он делает?
Соответствует одной или нескольким цифрам (d). d
соответствует цифрам любого языка в Юникоде (поэтому он также соответствует японским и арабским числам)
Что делает String beginningChars = inp.split("[\\d]+",2)[0]
?
Он применяет это регулярное выражение и разделяет строку на массивы строк, где бы ни находилось совпадение. [0]
в конце выбирает первый результат из этого массива, поскольку вам нужны начальные символы.
Каков второй параметр для .split(regex,int)
, который я указал как 2?
Это параметр Limit. Это означает, что регулярное выражение будет применяться к строке, пока не будет найдено одно совпадение. После обнаружения 1 совпадения строка больше не обрабатывается.
На странице Javadoc Strings:
Параметр limit управляет количеством применений шаблона и, следовательно, влияет на длину результирующего массива. Если предел n больше нуля, то шаблон будет применен не более n - 1 раз, длина массива будет не больше n, а последняя запись массива будет содержать все входные данные, кроме последнего совпавшего разделителя. Если n не положительно, шаблон будет применяться столько раз, сколько возможно, и массив может иметь любую длину. Если n равно нулю, шаблон будет применяться столько раз, сколько возможно, массив может иметь любую длину, а завершающие пустые строки будут отброшены.
Это будет эффективно, если ваша строка слишком большая.
Возможно другое регулярное выражение, если вы хотите разбить только на английские цифры
«[0-9] +»
public static void main(String[] args) {
String testString = "MFD324FR";
int index = 0;
for (Character i : testString.toCharArray()) {
if (Character.isDigit(i))
break;
index++;
}
System.out.println(testString.substring(0, index));
}
Это печатает первые n символов до того, как встретит цифру (т.е. целое число).
Используйте следующую функцию, чтобы получить требуемый вывод
public String getFirstChars(String str){
int zeroAscii = '0'; int nineAscii = '9';
String result = "";
for (int i=0; i< str.lenght(); i++){
int ascii = str.toCharArray()[i];
if(ascii >= zeroAscii && ascii <= nineAscii){
result = result + str.toCharArray()[i];
}else{
return result;
}
}
return str;
}
Передайте вашу строку как аргумент
Вот хорошее однострочное решение. Он использует регулярное выражение для сопоставления первых нечисловых символов в строке, а затем заменяет входную строку этим совпадением.
public String getFirstLetters(String input) {
return new String("A" + input).replaceAll("^([^\\d]+)(.*)$", "$1")
.substring(1);
}
System.out.println(getFirstLetters("AS23456SDE"));
System.out.println(getFirstLetters("1AS123"));
Вывод:
AS
(empty)
Простое решение может быть таким:
public static void main (String[]args) {
String str = "MFD324FR";
char[] characters = str.toCharArray();
for(char c : characters){
if(Character.isDigit(c))
break;
else
System.out.print(c);
}
}
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.