проверить строку с ожидаемым разделителем

Я хочу разделить строку, полученную от Bluetooth. я использую

StringTokenizer  splitStr = new StringTokenizer(readMessage, "\\|");
String numberSpeed = splitStr.nextToken();  //splitStr[0].replaceAll("\\D+","");
String numberTorque = splitStr.nextToken();  //splitStr[1].replaceAll("\\D+","");
numberSpeed = numberSpeed.replaceAll("\\D+","");
numberTorque = numberTorque.replaceAll("\\D+","");

Делал это с разделенной строкой раньше. Если я получаю поврежденные данные без разделителя, приложение вылетает при попытке сделать невозможное.

  • Как проверить, есть ли разделитель или нет, а затем продолжить разделение или пропустить его?

person Martynas    schedule 20.05.2014    source источник


Ответы (3)


вы можете проверить наличие разделителя в строке с помощью метода contains()

if(str.contains("_your_delimiter")) {   //for safe side convert your delimeter and search string to lower case using method toLowerCase()
     //do your work here
}
person Waqar Ahmed    schedule 20.05.2014
comment
if(readMessage.contains("|")){ StringTokenizer splitStr = new StringTokenizer(readMessage, "\\|"); numberSpeed = splitStr.nextToken().replaceAll("\\D+",""); numberTorque = splitStr.nextToken().replaceAll("\\D+",""); } все равно пытается разбить и вылетает - person Martynas; 20.05.2014
comment
можете выложить logcat. я имею в виду, какое исключение он выдает. - person Waqar Ahmed; 20.05.2014
comment
На самом деле это сработало ... Не знаю, что я изменил, но это сработало: D - person Martynas; 20.05.2014
comment
И как проверить, содержит ли строка число? if(str.contains("_your_delimiter && D+")) {??? Извините, я не знаю всех этих команд \\DD и так далее... - person Martynas; 20.05.2014
comment
см. здесь .. это может помочь вам в том, что вы хотите сделать. см. принятый ответ... stackoverflow.com/questions/18590901/ - person Waqar Ahmed; 20.05.2014

Попробуйте это, я использую это в своем приложении.

String container = numberSpeed ;
String content = "\\D+";
boolean containerContainsContent = StringUtils.containsIgnoreCase(container, content);

Будет return true, если есть разделитель, и false, если нет.

Используйте это с if statement. напр.

if(containerContainsContent){
//split it 
} else {
//skip it
}
person Ahmed Ekri    schedule 20.05.2014

Это цитата из документов токенизатора: StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code.

Вместо этого попробуйте использовать пользователя String.split().

if(str.contains(DEILIMITER)) {
     String tab[] = str.split(DEILIMITER);
    //enter code here

}
person RMachnik    schedule 20.05.2014