У меня есть строка, содержащая следующее: «Сделал это по-своему», 11.95 «История Шотландии», 14.50, «Изучение исчисления за один день», 29.95 « есть ли способ получить двойники из этой строки?Получение двойника из строки
ответ
Если вас интересуют любые цифры с цифрами, одним периодом и более цифрами, вы хотите использовать регулярные выражения. Например, \s\d*.\d\s
, указывая пробел, затем цифры, период, больше цифр и заканчивается пробелом.
Используйте регулярные выражения для извлечения двойников, то Double.parseDouble() для анализа: ([р] регулярного выражения) модуля
Pattern p = Pattern.compile("(\\d+(?:\\.\\d+))");
Matcher m = p.matcher(str);
while(m.find()) {
double d = Double.parseDouble(m.group(1));
System.out.println(d);
}
Собственно, этот ответ не работает для удвоений, если у них нет десятичной точки * внутри *. См. мой ответ, с тестовый выход, для решения, которое делает – Bohemian
, он отлично работает! –
Это регулярное выражение выходит из строя на отрицательных числах и на натуральных числах чисел. – Stepan
использовать регулярные выражения вашего любимого языка, построить Искатель для шаблона \d+\.\d+
, примените совпадение для входной строки, и вы получите соответствующие подстроки как группы захвата.
Вопрос отмечен как Java. –
String text = "Did It Your Way, 11.95 The History of Scotland, 14.50, Learn Calculus in One Day, 29.95";
List<Double> foundDoubles = Lists.newLinkedList();
String regularExpressionForDouble = "((\\d)+(\\.(\\d)+)?)";
Matcher matcher = Pattern.compile(regularExpressionForDouble).matcher(text);
while (matcher.find()) {
String doubleAsString = matcher.group();
Double foundDouble = Double.valueOf(doubleAsString);
foundDoubles.add(foundDouble);
}
System.out.println(foundDoubles);
Это находит двойников, целые числа (с и без десятичной точки) и фракции (ведущей десятичной запятой):
public static void main(String[] args)
{
String str = "This is whole 5, and that is double 11.95, now a fraction .25 and finally another whole 3. with a trailing dot!";
Matcher m = Pattern.compile("(?!=\\d\\.\\d\\.)([\\d.]+)").matcher(str);
while (m.find())
{
double d = Double.parseDouble(m.group(1));
System.out.println(d);
}
}
Выход:
5.0
11.95
0.25
3.0
Просто обратите внимание, что parseDouble все равно может выдать исключение, которое должно быть уловлено. избегая всего этого, и просто используя Scanner.nextDouble() проще – Voo
. Ваш взгляд на будущее дисквалифицирует заголовки разделов (например, '3.2.4'), и все же ваша группа захвата повторно разрешает их, [что делает невозможным] (http: // www.ideone.com/5nARX). –
Java предоставляет Scanner который позволяет сканировать String (или любой входной поток) и анализировать примитивные типы и токены с использованием регулярных выражений.
Скорее всего, предпочтительнее использовать это вместо написания собственного регулярного выражения, чисто по соображениям технического обслуживания.
Scanner sc = new Scanner(yourString);
double price1 = sc.nextDouble(),
price2 = sc.nextDouble(),
price3 = sc.nextDouble();
Вот как я сделал это, когда я получал данные от пользователя и не знал, что это будет выглядеть так:
Vector<Double> foundDoubles = new Vector<Double>();
Scanner reader = new Scanner(System.in);
System.out.println("Ask for input: ");
for(int i = 0; i < accounts.size(); i++){
foundDoubles.add(reader.nextDouble());
}
Использование сканера (например, из TutorialPoint). Выражения выражения, предложенные выше, не могут быть выполнены в этом примере: "Hi! -4 + 3.0 = -1.0 true"
обнаруживает {3.0, 1,0}
.
String s = ""Hello World! -4 + 3.0 = -1.0 true"";
// create a new scanner with the specified String Object
Scanner scanner = new Scanner(s);
// use US locale to be able to identify doubles in the string
scanner.useLocale(Locale.US);
// find the next double token and print it
// loop for the whole scanner
while (scanner.hasNext()) {
// if the next is a double, print found and the double
if (scanner.hasNextDouble()) {
System.out.println("Found :" + scanner.nextDouble());
}
// if a double is not found, print "Not Found" and the token
System.out.println("Not Found :" + scanner.next());
}
// close the scanner
scanner.close();
}
- 1. Извлечение двойника из строки с текстом
- 2. Получение последнего двойника перед двумя спрайтами сталкиваются
- 3. Получение десятичной части двойника в Swift
- 4. Игнорирование букв при разборе двойника из строки в файле
- 5. извлечение двойника из середины строки, невозможно использовать замену
- 6. Получение строки из строки
- 7. Получение строки из строки
- 8. Получение определенной строки из строки
- 9. Как удалить конечный ноль из двойника?
- 10. чтение двойника из двоичного файла в c
- 11. Чтение двойника из текстового файла в java
- 12. Как определить неявное преобразование из двойника?
- 13. Создать строку из двойника (62^16 = "ZZZZZZZZZZZZZZZ")
- 14. Получение JSONObject из строки
- 15. Получение номера из строки
- 16. Получение ComboBox из строки
- 17. Получение строки из spinner
- 18. Получение строки из NSManagedObject
- 19. Получение строки из EditText
- 20. Получение строки из subprocess.call?
- 21. Получение разделителя из строки
- 22. Получение строки из SQLCLR
- 23. Получение строки из Spinner
- 24. получение JSON из строки
- 25. Получение значения из строки
- 26. Получение строки из настроек
- 27. Получение значений из строки
- 28. Получение значения из строки
- 29. Получение исключения из строки
- 30. Получение строки из CharField
Это домашнее задание, не так ли? –