2015-10-18 18 views
3

String這樣增量最後一個字符串指標值

String ipAddress= "192.168.1.12"; 

我想自動增量的最後一個索引值12

13 
14 
15 

所以它會是這樣

192.168.1.13 
192.168.1.14 
192.168.1.15 
+1

你需要[顯示](HTTP測試: //stackoverflow.com/help/mcve))一些代碼。另外,檢查[parseInt](http://www.tutorialspoint.com/java/number_parseint。htm) – sam

+0

投票結束這個問題爲「太寬泛」,除非沒有顯示代碼工作。 –

+1

檢查也string.split –

回答

0

我打破字符串.字符,將最後一個元素轉換爲int,增加i T,並重新加入他們:

String ipAddress= "192.168.1.12"; 

String[] elements = ipAddress.split("\\."); 
elements[elements.length - 1] = 
    String.valueOf(Integer.parseInt(elements[elements.length - 1]) + 1); 

String newAddress = String.join(".", elements); 
1

您必須將初始字符串的最後一個點拆分,得到最後部分的數值,增加它並把它添加到字符串的開頭部分:

int posOfLastNumber = ipAddress.lastIndexOf('.') + 1; 
    String last = ipAddress.substring(posOfLastNumber); 
    String first = ipAddress.substring(0, posOfLastNumber); 

    int lastNumber = Integer.parseInt(last) + 1; 
    ipAddress = first + lastNumber; 
+0

您的解決方案正在變得類似於我的... :) – user3437460

+0

@ user3437460所以它似乎。偉大的思想家都認爲:-) –

+0

是的,我必須同意這種說法。 – user3437460

0

考慮報價:

「智能數據結構和愚蠢的代碼工作不是周圍的其他方法好了很多。」
- 雷蒙德,大教堂和市集

你有什麼比一個簡單的字符串更多。你有什麼是一個具有字符串表示和一些附加功能的對象。這可能是因爲這簡單的東西:

class IPAddress { 
    private int firstByte; 
    private int secondByte; 
    private int thirdByte; 
    private int fourthByte; 

    public IPAddress(int firstByte, int secondByte, int thirdByte, int fourthByte) { 
     this.firstByte = firstByte; 
     // etc. 
    } 

    public String toString() { 
     return String.format("%1$s.%2$s.%3$s.%4$s", firstByte, secondByte, thirdByte, fourthByte); 
    } 

    public void increment() { 
     // this would be a good place for bounds checking 
     fourthByte++; 
    } 
} 

此封裝功能集成到IPAddress數據類型本身,而不是要求,食用代碼執行各種字符串就可以分析邏輯。所有任何消耗性代碼需要做的就是在對象上調用.increment()

如果原始輸入是一個字符串,那麼您可以在這裏簡單地創建另一個構造函數,它接受一個字符串並將其解析爲地址的四個字節。

1

我想使用拆分。但它已經顯示。或者,您可以簡單地使用substringlastIndexOf來獲取最後一個點的位置。

int idx = ipAddress.lastIndexOf(".")+1; 
int last = Math.min(Integer.parseInt((ipAddress.substring(idx)))+1, 255); 
String newIpAddress = ipAddress.substring(0, idx) + last; 

上面的內容可以寫成一行,如果你想。

+0

**備註:**我也做了檢查,以確保IP地址不超過255。 – user3437460

0

首先,String是不可變的。如果我理解你的問題,你需要從一個IP地址開始,並返回下一個。通過增加溢出的八位字節(的IP地址)。喜歡的東西,

private static String incrementIp(String str) { 
    String[] parts = str.split("\\."); 
    int oct1 = Integer.parseInt(parts[0]); 
    int oct2 = Integer.parseInt(parts[1]); 
    int oct3 = Integer.parseInt(parts[2]); 
    int oct4 = Integer.parseInt(parts[3]); 
    oct4++; 
    if (oct4 > 255) { 
     oct4 = 0; 
     oct3++; 
    } 
    if (oct3 > 255) { 
     oct3 = 0; 
     oct2++; 
    } 
    if (oct2 > 255) { 
     oct2 = 0; 
     oct1++; 
    } 
    if (oct1 > 255) { 
     oct1 = 0; 
    } 
    return String.format("%d.%d.%d.%d", oct1, oct2, oct3, oct4); 
} 

我們可以通過增加10倍,像

public static void main(String[] args) { 
    String ipAddress = "192.168.1.254"; 
    for (int i = 0; i < 10; i++) { 
     System.out.printf("Before: %s, After: %s%n", ipAddress, 
       incrementIp(ipAddress)); 
     ipAddress = incrementIp(ipAddress); 
    } 
} 

其輸出(在大概預期

Before: 192.168.1.254, After: 192.168.1.255 
Before: 192.168.1.255, After: 192.168.2.0 
Before: 192.168.2.0, After: 192.168.2.1 
Before: 192.168.2.1, After: 192.168.2.2 
Before: 192.168.2.2, After: 192.168.2.3 
Before: 192.168.2.3, After: 192.168.2.4 
Before: 192.168.2.4, After: 192.168.2.5 
Before: 192.168.2.5, After: 192.168.2.6 
Before: 192.168.2.6, After: 192.168.2.7 
Before: 192.168.2.7, After: 192.168.2.8 
相關問題