我String
這樣增量最後一個字符串指標值
String ipAddress= "192.168.1.12";
我想自動增量的最後一個索引值12
13
14
15
所以它會是這樣
192.168.1.13
192.168.1.14
192.168.1.15
我String
這樣增量最後一個字符串指標值
String ipAddress= "192.168.1.12";
我想自動增量的最後一個索引值12
13
14
15
所以它會是這樣
192.168.1.13
192.168.1.14
192.168.1.15
我打破字符串.
字符,將最後一個元素轉換爲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);
您必須將初始字符串的最後一個點拆分,得到最後部分的數值,增加它並把它添加到字符串的開頭部分:
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;
您的解決方案正在變得類似於我的... :) – user3437460
@ user3437460所以它似乎。偉大的思想家都認爲:-) –
是的,我必須同意這種說法。 – user3437460
考慮報價:
「智能數據結構和愚蠢的代碼工作不是周圍的其他方法好了很多。」
- 雷蒙德,大教堂和市集
你有什麼比一個簡單的字符串更多。你有什麼是一個具有字符串表示和一些附加功能的對象。這可能是因爲這簡單的東西:
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()
。
如果原始輸入是一個字符串,那麼您可以在這裏簡單地創建另一個構造函數,它接受一個字符串並將其解析爲地址的四個字節。
我想使用拆分。但它已經顯示。或者,您可以簡單地使用substring
和lastIndexOf
來獲取最後一個點的位置。
int idx = ipAddress.lastIndexOf(".")+1;
int last = Math.min(Integer.parseInt((ipAddress.substring(idx)))+1, 255);
String newIpAddress = ipAddress.substring(0, idx) + last;
上面的內容可以寫成一行,如果你想。
**備註:**我也做了檢查,以確保IP地址不超過255。 – user3437460
首先,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
你需要[顯示](HTTP測試: //stackoverflow.com/help/mcve))一些代碼。另外,檢查[parseInt](http://www.tutorialspoint.com/java/number_parseint。htm) – sam
投票結束這個問題爲「太寬泛」,除非沒有顯示代碼工作。 –
檢查也string.split –