采用多个分割字符串的第一个大写字符

问题描述 投票:1回答:4

因此,当我的String到达特殊字符时,我想将它的第一个大写字符打印出来。

public static void main(String args[]){
    Scanner sc = new Scanner(System.in);
    String input = sc.nextLine();
    if(input.contains("-")){
        for (int i = 0; i < input.length(); i++){
            String[] parts = input.split("-",2);
            String string1 = parts[0];
            String string2 = parts[1];
            System.out.print(string1.substring(0, 0) + string2.substring(0,0));

        }
    }
}

``

我将举例说明我想做什么。

> input: Please-WooRk-siR
> output: PW
> input: This-Is-A-Test
> output: TIAT

因此,仅输出每个子字符串的第一个大写字符。有任何想法吗?在此先感谢:)

java string
4个回答
1
投票

这是一种方法。

      String str = "This-Is-a-Test-of-The-Problem";
      StringBuilder sb = new StringBuilder();
      for (String s : str.split("-")) {
         char c = s.charAt(0);
         if (Character.isUpperCase(c)) {
            sb.append(c);
         }
      }
      System.out.println(sb.toString());

1
投票

如果使用正则表达式,则可以使用零宽度的负前行来删除所有在单词开头不是大写字母的字符:

public static String capitalFirstLetters(String s) {
    return s.replaceAll("(?!\\b[A-Z]).", "");
}

运行测试用例时:

public static void main(String[] args) throws Exception {
    System.out.println(capitalFirstLetters("Please-WooRk-siR"));
    System.out.println(capitalFirstLetters("This-Is-A-Test"));
}

它打印:

PWTIAT


0
投票

将代码更新为此:

import java.util.*;
public class Main {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        if (input.contains("-")) {
            String[] parts = input.split("-");
            for (String part: parts) {
                System.out.print(Character.isUpperCase(part.charAt(0)) ? part.charAt(0) : "");
            }

        }
    }
}

输出:

1。

Input : A-Ba

AB

2。

Input : A-aB

A

3。

Input : A

现在,您的测试用例:

Input : This-Is-A-Test

TIAT

0
投票

利用javas流API的另一种解决方案

    Scanner sc = new Scanner(System.in);
    String input = sc.nextLine();
    if (input.contains("-")) {
        List<String> collect =
                Stream.of(input.split("-")) // get a stream of words
                .map(word -> word.substring(0, 1)) // get first character only
                .filter(character -> character.toUpperCase().equals(character)) // only keep if character is uppercase
                .peek(System.out::print) // print out character
                .collect(Collectors.toList()); // just needed for stream to start
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.