2017-10-10 5 views
0

Donc, j'essaie de trouver un caractère spécifique dans une entrée donnée par l'utilisateur. Dans ce problème, l'utilisateur entre un numéro de téléphone britannique en utilisant le formatJava - Utilisation de la méthode indexOf pour les entrées

(XXXX) XXX XXXX ou (XXXXX) XXX XXX

où l'indicatif régional est formé par les numéros entre crochets, et le numéro de téléphone personnel est formé par les numéros après cela.

Jusqu'à maintenant, j'ai essayé - sans succès - d'utiliser la méthode indexOf(String) pour trouver le support de fermeture à l'intérieur de l'entrée de l'utilisateur, ce qui est mon code:

import javax.swing.JOptionPane; 

public class L2ExerciseE { 
    public static void main(String[] args) { 
     String number = JOptionPane.showInputDialog("Please input thy number: "); 

     String areaCode = number.substring(1, indexOf(")")); 
     String telephoneNumber = number.substring((indexOf(")") + 1), 15); 
     System.out.println(); 

     System.out.println("The area code is: " + areaCode); 
     System.out.println("The telephone number: " + telephoneNumber); 
    } 
} 

Je suppose que ce problème se produit parce que les utilisations java un compilateur, tandis que Python, mon langage précédent, utilisait un interpréteur, et, même si j'ai essayé de lire d'autres réponses, j'ai de la difficulté à les comprendre.

Que puis-je faire pour que mon code fonctionne sans trop compliquer les choses? Pour l'instant, nous n'avons vu que quelques commandes d'E/S, des commandes arithmétiques, une concaténation de base et quelques autres commandes comme .substring(), .indexOf() et .trim().

Merci beaucoup d'avance!

Répondre

4

indexOf() n'est pas une fonction autonome (rien en Java est une fonction autonome), c'est une méthode sur un String. Vous devez utiliser number.indexOf(")") - vous cherchez ")" dans number.

0

Utilisez un modèle regex:

String number = "(1234) 123 1234"; 
String pattern = "\\((\\d{4})\\) (\\d{3} \\d{4})|\\((\\d{5})\\) (\\d{3} \\d{3})"; 
Pattern r = Pattern.compile(pattern); 
Matcher m = r.matcher(number); 
if (m.find()) { 
    System.out.println("Found area code: " + m.group(1)); 
    System.out.println("Found personal number: " + m.group(2)); 
} 

La raison pour laquelle une solution regex pourrait être la voie à suivre ici est que votre modèle de nombre exact peut avoir une certaine variété à ce . Par exemple, un nombre comportant plus d'un espace peut toujours être considéré comme valide, ce qui est facile à exprimer dans une expression régulière.

Demo

0

Il y a une erreur dans votre code. Essayez ceci: String areaCode = number.substring (1, number.indexOf (")")); String telephoneNumber = number.substring ((number.indexOf (")") + 1), 15);