Я думаю, что нет встроенной функции для удаления пустой строки в Java. Вы можете удалить пустую строку удаления, но это может привести к ошибке. Для безопасности вы можете сделать это, написав небольшой фрагмент кода следующим образом:
List<String> list = new ArrayList<String>();
for(String str : test)
{
if(str != null && str.length() > 0)
{
list.add(str);
}
}
test = stringList.toArray(new String[list.size()]);
Используя ваш пример того, как вы хотите изменить третий октет, я бы сделал это примерно так же, но я бы сжал некоторые шаги вместе:
$IP = "192.168.13.1"
$octets = $IP.Split(".") # or $octets = $IP -split "\."
$octets[2] = [string]([int]$octets[2] + 1) # or other manipulation of the third octet
$newIP = $octets -join "."
$newIP
Вот немного другой метод. [ ухмыляясь ] мне удалось не заметить ответ Джеффа Цейтлина, пока я не закончил это.
[edit - спасибо Джеффу Зейтлину за напоминание, что ОП хочет получить конечный результат в виде строки. упс! [* blush *]]
что он делает ...
вот код ...
$OriginalIPv4 = '1.1.1.1'
$TargetOctet = 3
$OctetList = [int[]]$OriginalIPv4.Split('.')
$OctetList[$TargetOctet - 1]++
$NewIPv4 = [ipaddress]($OctetList -join '.')
$NewIPv4
'=' * 30
$NewIPv4.IPAddressToString
output ...
[ 111]Вы можете просто использовать оператор -replace в PowerShell и шаблон просмотра в будущее. Посмотрите на этот скрипт ниже
Set-StrictMode -Version "2.0"
$ErrorActionPreference="Stop"
cls
$ip1 = "192.168.13.123"
$tests=@("192.168.13.123" , "192.168.13.1" , "192.168.13.12")
foreach($test in $tests)
{
$patternRegex="\d{1,3}(?=\.\d{1,3}$)"
$newOctet="420"
$ipNew=$test -replace $patternRegex,$newOctet
$msg="OLD ip={0} NEW ip={1}" -f $test,$ipNew
Write-Host $msg
}
. В результате получится следующее:
OLD ip=192.168.13.123 NEW ip=192.168.420.123
OLD ip=192.168.13.1 NEW ip=192.168.420.1
OLD ip=192.168.13.12 NEW ip=192.168.420.12
Как использовать оператор -replace?
[ 112] https://powershell.org/2013/08/regular-expressions-are-a-replaces-best-friend/
Понимание шаблона, который я использовал
(? =) В \ d {1,3} (? =. \ D {1,3} $) означает «оглянуться назад».
(? =. \ D {1,3} $ in \ d {1,3} (? =. \ D {1,3} $) означает что-либо позади DOT и 1-3 цифры .
Начальная буква \ d {1,3} - это инструкция для точного совпадения 1-3 цифр
Все в простом английском языке " Дайте мне 1-3 цифры позади точка и 1-3 цифры расположены к правой стороне строки "
Регулярное выражение с нетерпением
ИСПРАВЛЕНИЕ
Шаблон регулярного выражения это взгляд в будущее , а не взгляд в прошлое .
function Replace-3rdOctet {
Param(
[string]$GivenIP,
[string]$New3rdOctet
)
$GivenIP -match '(\d{1,3}).(\d{1,3}).(\d{1,3}).(\d{1,3})' | Out-Null
$Output = "$($matches[1]).$($matches[2]).$New3rdOctet.$($matches[4])"
Return $Output
}
Скопируйте в файл ps1 и поставьте его из командной строки, затем введите
Replace-3rdOctet -GivenIP '100.201.190.150' -New3rdOctet '42'
Вывод: 100.201.42.150
Оттуда вы можете добавить дополнительную обработку ошибок и т. Д. для случайного ввода и т. д.
Если у вас есть PowerShell Core (v6.1 или выше), вы можете объединить -replace
с заменой на основе блока сценариев :
PS> '192.168.13.1' -replace '(?<=^(\d+\.){2})\d+', { 1 + Если у вас есть PowerShell Core (v6.1 или выше), вы можете объединить -replace
с заменой на основе блока сценариев :
[110] -
Отрицательное обратное утверждение (?<=^(\d+\.){2})
сопоставляет все до 3-го октета, но не включает его, не считая его частью общего соответствия для замены. ,
-
(?<=...)
является проверочным утверждением, \d+
соответствует одной или нескольким (+
) цифрам (\d
), \.
и литералу [ 118], а {2}
соответствует предыдущему подвыражению ((...)
) 2 раза.
-
\d+
затем соответствует только 3-му октету; поскольку больше ничего не найдено, оставшаяся часть строки (.
и 4-й октет) остается на месте.
-
Внутри блока замещающего сценария ({ ... }
) Если у вас есть PowerShell Core (v6.1 или выше), вы можете объединить [111] с заменой на основе блока сценариев :
[110] -
Отрицательное обратное утверждение [112] сопоставляет все до 3-го октета, но не включает его, не считая его частью общего соответствия для замены. ,
- [113] является проверочным утверждением, [114] соответствует одной или нескольким ([115]) цифрам ([116]), [117] и литералу [ 118], а [119] соответствует предыдущему подвыражению ([1110]) 2 раза.
-
[1111] затем соответствует только 3-му октету; поскольку больше ничего не найдено, оставшаяся часть строки ([1112] и 4-й октет) остается на месте.
-
Внутри блока замещающего сценария ([1113]) [1114] ссылается на результаты сопоставления в виде экземпляра [MatchInfo]
; его .Value
- это совпадающая строка, то есть 3-й октет, к которому можно добавить 1
.
- Примечание к типу данных: при использовании
1
, неявного [int]
, в качестве LHS , RHS (строка .Value
) неявно приводится в действие на [int]
(вы можете использовать явное приведение).
На выходе все, что возвращает блок скрипта, автоматически приводится к строке .
Если вы должны поддерживать совместимость с Windows PowerShell , рассмотрите полезный ответ Джеффа Цейтлина .
ссылается на результаты сопоставления в виде экземпляра [MatchInfo]
; его .Value
- это совпадающая строка, то есть 3-й октет, к которому можно добавить 1
.
- Примечание к типу данных: при использовании
1
, неявного [int]
, в качестве LHS , RHS (строка .Value
) неявно приводится в действие на [int]
(вы можете использовать явное приведение).
На выходе все, что возвращает блок скрипта, автоматически приводится к строке .
Если вы должны поддерживать совместимость с Windows PowerShell , рассмотрите полезный ответ Джеффа Цейтлина .
.Value }
192.168.14.1
Отрицательное обратное утверждение (?<=^(\d+\.){2})
сопоставляет все до 3-го октета, но не включает его, не считая его частью общего соответствия для замены. ,
(?<=...)
является проверочным утверждением, \d+
соответствует одной или нескольким (+
) цифрам (\d
), \.
и литералу [ 118], а {2}
соответствует предыдущему подвыражению ((...)
) 2 раза. \d+
затем соответствует только 3-му октету; поскольку больше ничего не найдено, оставшаяся часть строки (.
и 4-й октет) остается на месте.
Внутри блока замещающего сценария ( Если у вас есть PowerShell Core (v6.1 или выше), вы можете объединить [111] с заменой на основе блока сценариев : Отрицательное обратное утверждение [112] сопоставляет все до 3-го октета, но не включает его, не считая его частью общего соответствия для замены. , [1111] затем соответствует только 3-му октету; поскольку больше ничего не найдено, оставшаяся часть строки ([1112] и 4-й октет) остается на месте. Внутри блока замещающего сценария ([1113]) [1114] ссылается на результаты сопоставления в виде экземпляра Если вы должны поддерживать совместимость с Windows PowerShell , рассмотрите полезный ответ Джеффа Цейтлина . { ... }
)
ссылается на результаты сопоставления в виде экземпляра
[MatchInfo]
; его .Value
- это совпадающая строка, то есть 3-й октет, к которому можно добавить 1
.
1
, неявного [int]
, в качестве LHS , RHS (строка .Value
) неявно приводится в действие на [int]
(вы можете использовать явное приведение).
На выходе все, что возвращает блок скрипта, автоматически приводится к строке .
[MatchInfo]
; его .Value
- это совпадающая строка, то есть 3-й октет, к которому можно добавить 1
.
1
, неявного [int]
, в качестве LHS , RHS (строка .Value
) неявно приводится в действие на [int]
(вы можете использовать явное приведение). Если вы должны поддерживать совместимость с Windows PowerShell , рассмотрите полезный ответ Джеффа Цейтлина .