tengo una cadena que contiene lo siguiente: "Did It Your Way, 11.95 The History of Scotland, 14.50, Aprende Cálculo en un día, 29.95" ¿Hay alguna manera de obtener los dobles? de esta cadena?Cómo obtener un doble de una cadena
Respuesta
Si le interesan todos los números con dígitos, un solo punto y más dígitos, desea usar expresiones regulares. Tal como \s\d*.\d\s
, que indica un espacio, seguido de dígitos, un punto, más dígitos y terminado con un espacio.
utilizar expresiones regulares para extraer dobles, a continuación, Double.parseDouble() para analizar:
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);
}
En realidad, esta respuesta no funciona en dobles a menos que tengan un punto decimal * dentro de * ellos. Vea mi respuesta, con salida de prueba, para una solución que hace – Bohemian
funciona perfectamente! –
Esta expresión regular falla en números negativos y en números números naturales – Stepan
utilizar expresiones regulares ([p] de expresiones regulares) de módulo de su idioma favorito, la construcción de un Matcher para el patrón \d+\.\d+
, aplique el matcher para la cadena de entrada y obtendrá las subcadenas coincidentes como grupos de captura.
La pregunta está etiquetada como 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);
Esto encuentra dobles, números enteros (con y sin un punto decimal), y las fracciones (un punto decimal líder):
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);
}
}
Salida:
5.0
11.95
0.25
3.0
Solo tenga en cuenta que parseDouble todavía puede lanzar una excepción que debe ser atrapada. evitar todo eso y simplemente usar Scanner.nextDouble() es más simple – Voo
Su anticipación descalifica los títulos de las secciones (por ejemplo, '3.2.4') y, sin embargo, su grupo de captura los vuelve a permitir, [lo hace fallar] (http: // www.ideone.com/5nARX). –
Java proporciona Scanner que le permite escanear un String (o cualquier flujo de entrada) y analizar tipos primitivos y tokens de cadena utilizando expresiones regulares.
Probablemente sea preferible usar esto en lugar de escribir su propia expresión regular, solo por razones de mantenimiento.
Scanner sc = new Scanner(yourString);
double price1 = sc.nextDouble(),
price2 = sc.nextDouble(),
price3 = sc.nextDouble();
Aquí es cómo lo hice cuando estaba recibiendo entrada de un usuario y no sabía lo que se vería así:
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());
}
Uso del escáner (ejemplo de TutorialPoint). Las expresiones regex sugeridas anteriormente fallan en este ejemplo: "Hi! -4 + 3.0 = -1.0 true"
detecta {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. ¿Cómo comprobar que una cadena es parseable a un doble?
- 2. ¿Cómo convierto un doble en una cadena en C++?
- 3. cacao - conversión de un doble a cadena
- 4. ¿Cómo reemplazo una comilla doble con una comilla doble escape-char en una cadena usando javascript?
- 5. cadena doble a hexagonal y cadena hexagonal a doble
- 6. la conversión de una cadena a un doble
- 7. Cómo imprimir un doble con una coma
- 8. Cómo convertir Array cadena de matriz doble en una línea
- 9. Algoritmo para convertir un doble IEEE 754 en una cadena?
- 10. Cómo citar \ "(barra doble) en un literal de cadena?
- 11. convertir muy pequeño doble en una Cadena
- 12. ¿Cómo obtener una cadena terminada nula de una cadena C#?
- 13. Conversión de doble a cadena en C++
- 14. Comprobando si una cadena es un doble o no
- 15. Cómo obtener los bits de un "doble" como "largo"
- 16. Android: Formato de cadena con valor doble
- 17. ¿Puedo obtener un PTypeInfo de una cadena?
- 18. ¿Cómo puedo verificar si un número (tipo doble) almacenado como una cadena es un número doble válido en C++?
- 19. Convierte una cadena en una doble, ¿es esto posible?
- 20. Cómo obtener un elemento HTML de una cadena con jQuery
- 21. ¿Cómo obtener un entero hexadecimal de una cadena en JS?
- 22. ¿Cómo obtener un hash MD5 de una cadena en Golang?
- 23. Cómo obtener una cadena de anchura
- 24. Convierta cualquier cadena de moneda al doble
- 25. Convertir cadena a doble - VB
- 26. ¿Cómo puedo dividir dos enteros para obtener un doble?
- 27. Obtener un OutputStream en una cadena
- 28. Cadena terminada en cero doble
- 29. Cita doble en cadena de JavaScript
- 30. Cómo obtener un apóstrofo en una cadena en javascript
Esto es tarea, ¿o no? –