Ich habe die folgende Methode, die alle Vorkommen einer {TIMESTAMP}
Teilzeichenfolge mit dem Wert von String.valueOf(System.nanoTime())
zurückgegeben wird, die Absicht ist, eine andere Zeitmarke pro Teilzeichenfolge zu erhalten, aber es resultiert in allen Teilstrings wird nur durch den gleichen Wert ersetzt.Ersetzen Sie alle Vorkommen einer Teilzeichenfolge einzeln nacheinander
class StringUtils {
private static String resolveTimestamp(String s) {
String timestamp = "\\{TIMESTAMP}";
return s.replaceAll(timestamp, String.valueOf(System.currentTimeMillis()));
}
}
class Sample {
public static void main(String[] args) {
StringUtils.resolveTimestamp("{TIMESTAMP}, {TIMESTAMP}, {TIMESTAMP}")
}
}
// The execution of the code above would result in:
// 241170886964203, 241170886964203, 241170886964203
// But I want to get this:
// 241733154573329, 241734822930540, 241751957270934
Ich möchte wissen, welche ist die beste Art und Weise zu tun, was ich will, wie es mehrere Möglichkeiten zu tun, dass gerade jetzt meiner Meinung nach kommen:
- Eine Schleife mit
s.matches(timestamp)
als Bedingung Iterieren über jedes Vorkommen der Teilzeichenfolge unds.replaceFirst(timestamp, String.valueOf(System.nanoTime()))
, um das Ersetzen innerhalb der Schleife durchzuführen. - den Teil Verwenden Sie die Zeichenfolge in mehrere Stücke mit
s.split(timestamp)
und iterieren die Stücke verbinden jedes Paar mit dem Wert vonString.valueOf(System.nanoTime()))
- wahrscheinlich einigen anderen Möglichkeiten
Hinweis zurück zu explodieren: Bitte beachten Sie, dass diese ist nicht das gleiche Problem adressiert in this question. Dort müssen sie mehrere Vorkommen eines festen Musters durch den gleichen Wert ersetzen, während ich mehrere Vorkommen desselben Teilzeichens durch jeweils einen anderen zur Laufzeit berechneten Wert ersetzen muss.
Welchen anderen Wert wünschen Sie? 'currentTimeMillis()' gibt wahrscheinlich den gleichen Wert zurück, wenn Sie ihn über einen kurzen Zeitraum aufrufen. – markspace
Sofern Sie nicht eine große Anzahl von Zeitstempeln (Zehntausende) in einer einzigen Zeichenfolge ersetzen, macht es keinen Unterschied, ob Sie sie einzeln oder alle gleichzeitig ausführen. Es wird alles innerhalb von weniger als einer Millisekunde passieren, so dass Sie trotzdem den gleichen Wert erhalten. Manchmal erhalten Sie Werte, die sich an der letzten Stelle um 1 unterscheiden, wenn Sie eine Millisekundengrenze überschreiten. Ich denke, das ist ein [XY-Problem] (http://xyproblem.info) –
Mögliches Duplikat von [java regulären Ausdruck suchen und ersetzen] (https://stackoverflow.com/questions/9605716/java-regular-expression-find -und-replace) –