Comment puis-je obtenir le dernier entier "56" de la chaîne comme RA12KE43SH56? P>
Je dois modifier la valeur suivante que RA12KE43SH57 afin que je souhaite obtenir la dernière valeur entière. P>
6 Réponses :
Pattern p = Pattern.compile("[0-9]+$");
Matcher m = p.matcher(str);
if(m.find()) {
result = m.group();
}
Pourquoi pas seulement épingler le re à la fin avec '[0-9] + $'?
Merci mais cela fonctionnera pour le dernier chiffre ABC88 mais quand il vient ABC9999, cela ne fonctionnera pas
@nynerobot - En effet, j'ai mis à jour ma réponse @rakesh - je n'ai pas reçu votre commentaire. Cela fonctionne également avec ABC9999.
public class PrefixId {
public String getTransactionNumber() {
String prevNumber = "123abc321";
String incredNumber = "";
for (int i = prevNumber.length() - 1; i >= 0; i--) {
char ch = prevNumber.charAt(i);
if (incredNumber.length() > 0 && !Character.isDigit(ch)) {
break;
} else if (Character.isDigit(ch)) {
incredNumber = incredNumber + ch;
}
}
if (incredNumber.length() > 0) {
incredNumber = new StringBuffer(incredNumber).reverse().toString();
prevNumber = prevNumber.replace(incredNumber, ""
+ (Long.parseLong(incredNumber) + 1));
}
return prevNumber;
}
public static void main(String[] args) {
PrefixId prefixId = new PrefixId();
System.out.println(prefixId.getTransactionNumber());
}
}
Peut-être que quelque chose comme ceci est ce que vous voulez ( Voir aussi sur iDoneone.com ):
static String nextId(String id) {
String[] parts = id.split("(?=\\d+$)", 2);
final int L = parts[1].length();
final int num = Integer.parseInt(parts[1]) + 1;
return parts[0] + String.format("%0"+L+"d", num);
}
public static void main(String[] args) {
String[] tests = {
"jamesBond007", "ra12ke43sh57", "-42", "x888y999", "00000"
};
for (String test : tests) {
System.out.println(nextId(test));
}
// prints "jamesBond008", "ra12ke43sh58", "-43", "x888y1000", "00001"
}
string.split (string regex, intension intensive) code> , limité à 2 parties
pièces [0] code> est le préfixe statique, éventuellement vide li>
-
parties [1] code> est la séquence de chiffres à la fin de la chaîne li>
ul> li>
- Utilisation de la largeur zéro correspondant à la lunette de lunette positive à scinder
-
(? = \ d + $) code> correspond à une position dans laquelle vous pouvez correspondre à \ d + $ code>
- c'est-à-dire que le caractère du chiffre
\ d code> classe de caractères li>
- ... répété un ou plusieurs fois
+ code> li>
- ... jusqu'à la fin de l'ancrage de chaîne
$ code> li>
ul> li>
ul> li>
- en utilisant
string.format code> pour préserver les zéros de premier plan
- Un format comme
% 05d code> signifie:
-
0 code>: tampon avec des zéros principaux li>
-
5 code>: largeur est 5 li>
-
d code>: conversion entier décimal li>
ul> li>
ul> li>
ul> Questions connexes h3>
sur les regards de surveillance: p>
- Comment l'expression régulière
(? travail? li>
- java Split mange mes personnages. li>
ul>
références h3>
- régulier-expressions.info/lookarounds , classes de caractères , Repetition , Anchers Li>
ul> p>
Vous êtes évidemment amoureux des regards de surveillance :) Mais dans ce cas, le simple "(\\ d +) $" (\\ d +) $ "ferait également - capturer directement l'ID directement, au lieu de faire correspondre la position de départ de l'ID et de la scinder la chaîne.
Pas une réponse, il suffit de mentionner que les expressions régulières "évidentes" pour cela (comme indiqué ci-dessus) ont un comportement quadratique méchant dans le pire des cas (je suis sûr que vous ne traitez pas de tels cas dégénéré, mais C'est intéressant dans son propre accord). P>
C'est un autre exemple de Schlemiel l'algorithme du peintre, EN.Wikipedia.org/wiki/schlemeliel_the_painter%27s_algorithm < / a>, inventé par notre propre Joel Spolsky.
public static String getLastDigits(String string) {
String reverseTaskId = new StringBuilder(string).reverse().toString();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < reverseTaskId.length(); i++) {
if (Character.isDigit(reverseTaskId.charAt(i))) {
sb.insert(i, reverseTaskId.charAt(i));
} else {
break;
}
}
return sb.reverse().toString();
}
str.replaceAll("[0-9]+$","")