2013-11-21 98 views
0

我在一臺服務器以下連接字符串:解析連接字符串與端口

val connStr = "redis://redistogo:[email protected]:10333/" 

Redis的客戶我都用,沒有一個構造適合此連接字符串,它只有一個帶有主機和端口的構造函數:

class SomeRedisClient(val host: String, val port: Int) { ... 

。下面的代碼無法正常工作或:

val url = new java.net.URL(connStr) 

錯誤 - java.net.MalformedURLException: unknown protocol: redis

如何解析這個連接字符串傳遞它的Redis的構造?

P.S.我不能選擇其他redis客戶端。

+0

在我身體的每一根骨頭不希望最後一個冒號之後和/前說脫光字符串,但我知道這是一個可怕的解決方案。 – david99world

+0

http://docs.oracle.com/javase/tutorial/networking/urls/urlInfo.html –

+0

@Suganthan,這不是一個網址,這是uri。 –

回答

3

使用URI

String connStr = "redis://redistogo:[email protected]:10333/"; 
URI uri = new URI(connStr); 
System.out.println(uri.getScheme()); 
System.out.println(uri.getHost()); 
System.out.println(uri.getPort()); 

String connStrWithoutPort = connStr.replace(":" + uri.getPort(), ""); 
System.out.println(connStrWithoutPort); 

// or a more safe version (because the user info part might contain a 
// password that matches the port, e.g. 
// redis://redistogo:[email protected]:10333/ 
StringBuilder withoutPort = new StringBuilder(); 

withoutPort.append(uri.getScheme()); 
withoutPort.append("://"); 
String userInfo = uri.getUserInfo(); 
if (userInfo != null) { 
    withoutPort.append(userInfo); 
    withoutPort.append("@"); 
} 
withoutPort.append(uri.getHost()); 

String withoutPortString = withoutPort.toString(); 
+0

如何獲取整個字符串'redis:// redistogo:fd578d89004321fe @ tarpon.redistogo.com'但端口? –

+0

我想通過使用此uri的套接字創建連接。但是,套接字的構造函數不接受schemeSpecificPart或userInfo? InetAddress也是一樣。你介意給我一個關於如何創建套接字的建議嗎? –