Java 获取多个拆分字符串的第一个大写字符

Java 获取多个拆分字符串的第一个大写字符,java,string,Java,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++){ Str

因此,当字符串到达一个特殊字符时,我希望在拆分字符串时打印出第一个大写字符

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));

        }
    }
}
因此,只打印每个子字符串的第一个大写字符。

有什么想法吗?提前感谢:)

这是一种方法

String str=“这是一个测试问题”;
StringBuilder sb=新的StringBuilder();
用于(字符串s:str.split(“-”){
字符c=s.charAt(0);
if(字符.大写(c)){
sb.附加(c);
}
}
System.out.println(sb.toString());

这是一种方法

String str=“这是一个测试问题”;
StringBuilder sb=新的StringBuilder();
用于(字符串s:str.split(“-”){
字符c=s.charAt(0);
if(字符.大写(c)){
sb.附加(c);
}
}
System.out.println(sb.toString());

如果使用正则表达式,则可以使用零宽度负前瞻删除单词开头的所有非大写字符:

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"));
}
它打印:


TIAT


如果使用正则表达式,则可以使用零宽度负前瞻删除单词开头的所有非大写字符:

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"));
}
它打印:


TIAT


将代码更新为:

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) : "");
            }

        }
    }
}
输出:

一,

二,

三,

现在,您的测试用例:

Input : This-Is-A-Test

TIAT

将代码更新为:

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) : "");
            }

        }
    }
}
输出:

一,

二,

三,

现在,您的测试用例:

Input : This-Is-A-Test

TIAT

另一个利用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
    }
}
Scanner sc=新扫描仪(System.in);
字符串输入=sc.nextLine();
if(input.contains(“-”){
列表收集=
Stream.of(input.split(“-”)//获取字流
.map(word->word.substring(0,1))//仅获取第一个字符
.filter(character->character.toUpperCase().equals(character))//仅当字符为大写时保留
.peek(System.out::print)//打印出字符
.collect(Collectors.toList());//只需要启动流
}
}

另一个利用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
    }
}
Scanner sc=新扫描仪(System.in);
字符串输入=sc.nextLine();
if(input.contains(“-”){
列表收集=
Stream.of(input.split(“-”)//获取字流
.map(word->word.substring(0,1))//仅获取第一个字符
.filter(character->character.toUpperCase().equals(character))//仅当字符为大写时保留
.peek(System.out::print)//打印出字符
.collect(Collectors.toList());//只需要启动流
}
}

您的问题是“第一个大写字母”,但在您的示例中,您没有在“siR”中包含R。你的意思是第一个字母,但只有当它是大写的时候?只是每个被拆分的子字符串的第一个大写字符。我不包括R,因为它不是子字符串的第一个字符。也就是说,“请WooRk先生”应该变成3个单独的字符串“请”,“WooRk”,“先生”。我只想要每个新字符串的第一个大写字母iff。它以大写字母开头。希望这能把事情弄清楚:)你的问题是“第一个大写字母”,但在你的例子中,你没有在“siR”中包含R。你的意思是第一个字母,但只有当它是大写的时候?只是每个被拆分的子字符串的第一个大写字符。我不包括R,因为它不是子字符串的第一个字符。也就是说,“请WooRk先生”应该变成3个单独的字符串“请”,“WooRk”,“先生”。我只想要每个新字符串的第一个大写字母iff。它以大写字母开头。希望这能澄清问题:)您能更新您的代码以使用StringBuilder吗?我想点击你的答案,但这令人不安me@ControlAltDel,除非这是代码中已证实的瓶颈(不太可能),否则您可能是在浪费时间对其进行优化。通过编译器,字符串附加也会变成一种stringbuilder变体。因此,在我看来,这只会使代码更加混乱。@n247s当您在循环中串联时,Java编译器至少在的时候没有帮助。但是我同意你的观点,不要为了优化而使代码更难看。对整个系统进行优化,而不是对每个部分进行优化@ᴇʟᴇvᴀтᴇ 我正在推广良好的代码实践,因为未知数量的人可能会在某个时候看到这个问题和答案。您能更新您的代码以使用StringBuilder吗?我想点击你的答案,但这令人不安me@ControlAltDel,除非这是代码中已证实的瓶颈(不太可能),否则您可能是在浪费时间对其进行优化。通过编译器,字符串附加也会变成一种stringbuilder变体。因此,在我看来,这只会使代码更加混乱。@n247s当您在循环中串联时,Java编译器至少在的时候没有帮助。但是我同意你的观点,不要为了优化而使代码更难看。对整个系统进行优化,而不是对每个部分进行优化@ᴇʟᴇvᴀтᴇ 我正在推广良好的代码实践,因为不知多少人可能会在某个时候看到这个问题和答案。@Robert你能试试我的答案吗?谢谢。这是有效的:)但对我个人来说,代码要复杂一点。我不太清楚“?part.charAt(0):”后面的意思,在您的打印结束时,我已经尝试对其进行更新,但由于我现在才创建了此帐户,因此未对其进行记录。目前声誉太低。但是谢谢你@罗伯特,你能试试我的答案吗?谢谢。这是有效的:)但对我个人来说,代码要复杂一点。我不太清楚“?part.charAt(0):”后面的意思,在您的打印结束时,我已经尝试对其进行更新,但由于我现在才创建了此帐户,因此未对其进行记录。太低