2015-10-18 4 views
3

У меня есть String как этотIncrement Последняя строка Значение индекса

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 т, и присоединиться к ним:

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

@ пользователь3437460 поэтому похоже. Великие мысли думают одинаково :-) –

+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

Я также хотел использовать раскол. Но это уже было показано. Кроме того, вы можете просто использовать 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; 

Вышеуказанные могут быть написаны одной строкой, если хотите.

+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 
Смежные вопросы