2016-06-14 4 views
-2

J'essaie de lire à partir d'un fichier et de remplacer toutes les valeurs en dollars par euros, par exemple si quelque part dans le fichier il y a 30,25 $, il devrait être converti en 26,84E. J'ai réussi à le faire fonctionner, mais je ne sais pas comment le faire fonctionner si, par exemple, le texte contient quelque chose comme 30,25 $. (remarquez le point à la fin). J'utilise les méthodes de remplacement de chaîne, mais si j'utilise replace (".", ""), Il enlève évidemment tous les points, donc ça ne marchera pas. Pouvez-vous m'aider d'une autre façon pour que cela fonctionne?Java: lecture/écriture de fichier

Merci d'avance.

+2

Avez-vous essayé "tout point qui est entouré par des nombres"? Découvrez un tutoriel sur regex. – Gendarme

+0

Le fichier est-il quelque chose que vous créez à la suite de votre programme et qui est ensuite lu? Si c'est le cas, je pense qu'il serait préférable d'identifier ce qui provoque l'arrêt complet supplémentaire et de corriger cela, au lieu de le vérifier plus tard – Peter

+0

alors voulez-vous https://docs.oracle.com/javase/7/docs/ api/java/lang/String.html # replaceFirst (java.lang.String,% 20java.lang.String) –

Répondre

0

Vous pouvez toujours utiliser les méthodes remplacer si vous pouvez isoler l'événement que vous voulez garder la première, ce qui pourrait être fait à l'aide String.split()

L'exemple ci-dessous utilise un regard positif-behind de partager sur les points de suspension. Définition d'un regard derrière-positif de Regex101:

Regex101 Positive lookbehind description


private String replaceAllButFirstOccurrence(String text, String sequence){ 
    if(text.contains(sequence) && (text.indexOf(sequence) != text.lastIndexOf(sequence))){ 
     //There are at least 2 occurrences of the sequence 
     String[] substrings = text.split("(?<=\\.)", 2); //Split in 2 
     /* 
      Input is now segmented in 2: 
       [0] - The first sub string containing the first occurrence 
       [1] - The second sub string containing the rest of the input that can be modified 
     */ 
     return substrings[0] + substrings[1].replaceAll("\\.", ""); 
    } 
    return text; 
} 

Exemple:

$100 -> $100 
$200.00 -> $200.00 
$250.00. -> $250.00 
$300.00.. -> $300.00