Disons que j'ai une adresse e-mail. Comme: kate.daniels@somecompany.com.
Et j'ai besoin de le séparer sans utiliser de split ou de boucles. Et que j'ai besoin d'utiliser IndexOf
en combinaison avec une sous-chaîne et sans utiliser de boucle (cela viendra plus tard après avoir une bonne compréhension de cela en premier).
Mais en regardant cette adresse e-mail avec le comprendre que les adresses e-mail sont au format: (firstName + "." + lastName + "@" + companyName + ".com")
emailAddress = input.nextLine(); // This is where I have issues. firstName = emailAddress.substring(emailAddress.IndexOf(".") ); // How do I get this to be just the last name and not lastName + "@somecompany.com" lastName = emailAddress.substring(emailAddress.IndexOf(".") + 1); // And how do I get the company name without the ".com" companyName = emailAddress.substring(emailAddress.IndexOf("@") + 1);
Merci pour toute aide que vous pouvez fournir. Je peux voir en quoi cela serait très utile et j'aimerais apprendre.
J'ai regardé et je n'ai pas vu de réponse à ma question.
3 Réponses :
Si vous trouvez le @
en premier et que vous divisez la chaîne ici, vous pouvez trouver le .
dans l'une ou l'autre partie sans vous soucier de l'autre.
Voici comment vous le feriez dans ce scénario:
Firstname: kate Lastname: daniels Company: somecompany
Output: final
String emailAddress = "kate.daniels@somecompany.com"; String firstName = emailAddress.substring(0, emailAddress.indexOf('.')); String lastName = emailAddress.substring(emailAddress.indexOf('.') + 1, emailAddress.indexOf('@')); String companyName = emailAddress.substring(emailAddress.indexOf('@') + 1, emailAddress.lastIndexOf('.')); System.out.println("Firstname: " + firstName + "\nLastname: " + lastName + "\nCompany: " + companyName); //Print them
Substring a besoin de deux paramètres pour obtenir une plage , un index de début et de fin. Sous-chaîne
avec un seul paramètre unique suppose que le paramètre est l'index de début et renvoie le reste de la chaîne
à partir de cet emplacement. Consultez la documentation ici.
Notez que l'index de début pour sous-chaîne
est inclusif donc pour lastName
et companyName
j'avais besoin de mettre +1 pour exclure le .
et le @
du résultat.
Une autre chose importante à noter est que pour emailAddress
j'ai dû utiliser lastIndexOf (".")
car il y a deux points dans le String
et cela garantira que vous obtiendrez le dernier pour sous-chaîne
les plages correctes. Normalement, indexOf
renvoie la première occurrence.
Merci beaucoup! Ceci est exactement ce que je cherchais! C'est vraiment cool. Je suis nouveau sur Java, je viens du côté des bases de données du monde et être capable de casser les choses comme ça est merveilleux.
@Martha Pas de problème. Je sais que vous avez dit de ne pas utiliser split pour le problème aussi, mais à l'avenir, il pourrait être utile d'utiliser quelque chose comme String [] s = emailAddress.split ("[. @]");
qui est beaucoup plus simple et mettra dans les 3 noms dont vous avez besoin dans les 3 premiers emplacements de tableau! Bonne chance!
Je pense que la meilleure solution est d'utiliser RegExp
. C'est beaucoup plus clair que str.substring()
.
String email = "kate.daniels@somecompany.com"; int dotOne = email.indexOf('.'); int at = email.indexOf('@', dotOne + 1); int dotTwo = email.indexOf('.', at + 1); String firstName = email.substring(0, dotOne); // kate String lastName = email.substring(dotOne + 1, at); // daniels String companyName = email.substring(at + 1, dotTwo); // somecompany
Au cas où vous voudriez vraiment utiliser str.substring () code>, alors tout ce dont vous avez besoin est juste de trouver une limite de points et de l'utiliser:
String email = "kate.daniels@somecompany.com"; Pattern pattern = Pattern.compile("(?<firstName>\w+)\.(?<lastName>\w+)@(?<companyName>\w+)\.\w+"); Matcher matcher = pattern.matcher(email); if (matcher.matches()) { String firstName = matcher.group("firstName"); // kate String lastName = matcher.group("lastName"); // daniels String companyName = matcher.group("companyName"); // somecompany }
Merci de votre aide à ce sujet. Je n'ai pas encore commencé à utiliser RegExp, mais une fois que je le ferai, j'y reviendrai. Je vous remercie
Double possible de la plage d'index de sous-chaîne