Как проверить значения String и массива String вместе? Возможно использование необязательного синтаксиса? - PullRequest
1 голос
/ 30 октября 2019

Я хочу обработать несколько проверок, что мне нужно обрабатывать точно?

String result = "John+Doe"; // value comes from third-party in this format
if(result != null) {
   String[] value = result.split("\\+");
   String name = value[0];
   String lastName = value[1];

   System.out.println(name);
   System.out.println(lastName);
}

Это случай по умолчанию, что я ожидал, и я обработал таким образом, что печать будет Джон и Доу

Вопрос в том, что, если result значение равно JohnDoe - одно слово, как с этим справиться, чтобы напечатать это одно слово (значение)?

Нужно ли проверять каждое значение для null и т. Д. (имя, фамилия, значение, результат)? например value.length> 0

Как все это объединить? Не знакомы с Optional из Java 8?

Ответы [ 5 ]

0 голосов
/ 30 октября 2019

Использование Optional может привести к:

String[] value = result.split("\\+");
Optional<String> name = Optional.ofNullable(value.length>0 && value[0].length()!=0 ? value[0] : null);
Optional<String> lastName = Optional.ofNullable(value.length>1 && value[1].length()!=0 ? value[1] : null);
System.out.println("Result is "
    +name.orElse("")
    +lastName.map(" ln:"::concat).orElse("")
);

С JohnDoe у вас будет Result is JohnDoe

С +JohnDoe у вас будет Result is ln:JohnDoe

С Jonn+Doe у вас будет Result is John ln:Doe

name (или lastname) - это Optional<String>, что означает, что либо есть значение, либо его нет вообще (разбор будет определять состояние). Затем вы можете использовать этот Optional для генерации любого вывода в обоих случаях.

0 голосов
/ 30 октября 2019

Простой способ может быть:

String result = "John+Doe";
        String s = Optional.ofNullable(result).orElse("");
        if (!s.trim().isEmpty()) {
            String[] value = result.split("\\+");
            if(value.length>1)
            {
                String name = value[0];
                String lastName = value[1];
                System.out.println(name);
                System.out.println(lastName);
            }
            else
            {
                System.out.println("invalid result=="+result);
            }

        }
0 голосов
/ 30 октября 2019

Простой способ может быть:

String[] value = result.split("\\+");
String name = value[0];
String lastName = value.length>1? value[1] : "No last name found"; // or `""` an empty string

Предполагая, что сам результат не равен нулю

0 голосов
/ 30 октября 2019

Вы можете просто проверить, содержит ли результат знак +. Если он содержит знак плюс, то у вас есть и имя, и фамилия, если нет, то у вас есть только имя:

       if(result != null) {
            String name;
            String lastName = "";
            if (result.contains("+")){
                String[] value = result.split("\\+");
                name = value[0];
                lastName = value[1];
            }else{
                name = result;
            }
            System.out.println(name);
            System.out.println(lastName);
        }

Вывод при result = "John+Doe";

John
Doe

Вывод при result = "JohnDoe";

JohnDoe

Я не думаю, что Optional сделает это более понятным, но вот пример с Optional:

 if(result != null) {
                String[] value = result.split("\\+");
                String name = value[0];
                Optional<String> lastName = Optional.ofNullable(value.length>1?value[1]:null);

            System.out.println(name);
            if (lastName.isPresent()) {
                System.out.println(lastName.get());
            }
        }

lastName может принимать либо null, либоString. Затем в строках System.out вы можете проверить, является ли lastName присутствующим, и напечатать или нет.

0 голосов
/ 30 октября 2019

В случае, если вы получите строку типа "JohnDoe", в вашем массиве String будет только один элемент, и при попытке вызвать value[1] возникнет исключение ArrayOutOfBounds. Дополнительная проверка, которую вам нужно выполнить после разделения строки:

if(value.length<2) {
 // wrong input
 } else{
 // your code
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...