2016-07-12 7 views
1

Ich habe für die letzte Stunde meinen Kopf gegen eine Wand geschlagen und versucht, mit Java einen eloquenten Weg zu finden (die Anwendung ist in Java, also muss ich sie verwenden)) um ein bestimmtes Problem zu lösen. Ich versuche, eine beliebige Zahl (auch wenn sie führende Nullen hat) in einer RESTful-URL mit Hashtags zu ersetzen, so dass wir verfolgen können, wie oft ein bestimmter Anruf getätigt wurde, unabhängig von der ID. Hier sind einige Beispiele von dem, was ich bin auf der Suche zu tun:Java ersetzen Sie alle Zahlen in einer URL zwischen oder nach Schrägstrichen

http://host.com/api/person/1234 Bedürfnisse http://host.com/api/person/#####

http://host.com/api/person/1234/jobs Bedürfnisse sein http://host.com/api/person/#####/jobs

http://host.com/api/person/1234/jobs/321 Bedürfnisse http://host.com/api/person/#####/jobs/#####

http://host.com/api/person/abc1234/jobs Bedürfnisse zu bleiben http://host.com/api/person/abc1234/jobs

Die Hashtags, die eingefügt werden, sind immer 5 Hashtags an k eep Dinge einheitlich. Ich habe dies mit zwei Schritten funktioniert, ich habe versucht, einen Weg zu finden mit regex und replaceAll, um es in einem zu tun, obwohl, wenn jemand anderes einen besseren Weg weiß, um es in einem Schritt zu tun, bin ich auch offen dafür.

+0

Sigh. Ist das Pfundzeichen heute wirklich ein "Hashtag"? –

Antwort

2

Sie können replaceAll() Methode mit diesem einfachen regex verwenden:

(?<=/)\\d+ 

Was bedeutet "entsprechen alle Zahlen nach Slash (/)".

Beispiel:

List<String> urls = Arrays.asList("http://host.com/api/person/1234", "http://host.com/api/person/1234/jobs", "http://host.com/api/person/1234/jobs/321", "http://host.com/api/person/abc1234/jobs", "http://host.com/api/person/1234abc/jobs"); 
for (int i = 0; i < urls.size(); i++) { 
    urls.set(i, urls.get(i).replaceAll("(?<=/)\\d+(?=/|$)", "#####")); 
} 
System.out.println(urls.toString()); 

// Result: 
// [http://host.com/api/person/#####, http://host.com/api/person/#####/jobs, http://host.com/api/person/#####/jobs/#####, http://host.com/api/person/abc1234/jobs, host.com/api/person/1234abc/jobs] 

Ideone

+0

Dies ist ziemlich nah an der vollständigen Antwort. Wenn ich meinen Test ausführe, ist das eine Szenario, das nicht abgedeckt ist, dass nach dem Schrägstrich Zahlen gefolgt von Alphazeichen stehen. Der Test ist: http://host.com/api/person/1234abc/jobs sollte nicht geändert werden, aber endet, http://host.com/api/person/#####abc/jobs. Dennoch, plus 1 für die Beantwortung der Frage basierend auf den bereitgestellten Informationen. – user3206108

+0

@ user3206108 sollte es jetzt funktionieren, werfen Sie einen Blick. – developer033

+0

Das hat es getan. Danke @ developer033 – user3206108