【问题标题】:How to deal with punctuation marks and capitalization on a reversed String?如何处理反转字符串上的标点符号和大写?
【发布时间】:2018-08-19 15:22:41
【问题描述】:

我从 EditText 获取用户输入,将其反转然后在 TextView 上输出。一切正常,除了输入的字符串输出,例如StackOverflow is a community of awesome programmers!变成!programmers awesome of community a is StackOverflow

现在我想:

  • 当字符串反转时将第一个字母大写:Programmers awesome of community a is StackOverflow
  • 将该感叹号或任何其他标点符号放在末尾而不是开头。我们的例子应该是:programmers awesome of community a is StackOverflow !

我使用下面的代码来反转字符串:

        String[] nowTyping = input.getText().toString().split(" ");
        ArrayList<String> wordArray = new ArrayList<>();
        for (String word : nowTyping) {
            wordArray.add(0, word);
        }
        String invertedSentence = TextUtils.join(" ", wordArray);
        output.setText(invertedSentence);

我已经尝试android:inputType="textCapWords" 将第一个字母大写,但似乎不起作用。 感谢您的宝贵时间。

【问题讨论】:

    标签: java android arrays string


    【解决方案1】:

    试试这样的

    String[] nowTyping = "It is broken!".split(" ");
                ArrayList<String> wordArray = new ArrayList<>();
                ArrayList<String> symbolsArray = new ArrayList<>();
                int cnt=0;
                for (int j=nowTyping.length-1 ;j >=0;j--) {
                    String word = nowTyping[j];
                    if (word.length()>0) {
                        word = word.toLowerCase();
                        char firstChar = word.charAt(0);
                        if (cnt == 0) {
                            boolean isFirstCharFounded = false;
                            for (int i = 0; i < word.length(); i++) {
                                if (!isFirstCharFounded&&Character.isAlphabetic(word.charAt(i))) {
                                    firstChar = word.charAt(i);
                                    isFirstCharFounded = true;
                                } else if (!(Character.isDigit(word.charAt(i))||Character.isAlphabetic(word.charAt(i)))) {
                                    symbolsArray.add(word.charAt(i) + "");
                                    word = word.replace(word.charAt(i)+"","");
                                }
                            }
    
                            firstChar = Character.toUpperCase(firstChar);
                            cnt++;
                        }
                        if (word.length()>=2) {
                            word = firstChar + word.substring(1);
                        }
                        else {
                            word = firstChar + "";
                        }
    
                        wordArray.add( word);
                    }
                }
                String invertedSentence = TextUtils.join(" ", wordArray);
                invertedSentence += TextUtils.join("",symbolsArray);
    

    【讨论】:

    • 这会将输入字符串的第一个字母大写,并将标点符号移动到使用它的单词的末尾。例如:It didn't work!=> work! didn't It(这里有一个大写字母 i)
    • 是的,你想做什么?
    • 我想要类似:It didn't work! => Work didn't it!.
    • 所以你想要'!'在字符串末尾?
    • 句子的结尾,这里是数组的结尾。我才意识到这个问题有多复杂:D
    【解决方案2】:

    您可以使用 StringBuilder:

        String invertedSentence = "!programmers awesome of community a is StackOverflow";
        StringBuilder stringBuilder = new StringBuilder(invertedSentence);
    
        if (!Character.isLetter(stringBuilder.charAt(0))) {
            char mark = stringBuilder.charAt(0);
            stringBuilder = stringBuilder.deleteCharAt(0);
            stringBuilder = stringBuilder.append(mark);
        }
    
        if (!Character.isUpperCase(stringBuilder.charAt(0))) {
            char mark = stringBuilder.charAt(0);
            stringBuilder = stringBuilder.deleteCharAt(0);
            stringBuilder = stringBuilder.insert(0, Character.toUpperCase(mark));
        }
    
        invertedSentence = stringBuilder.toString();
    

    【讨论】:

    • 感谢您的快速回复,但这似乎不起作用,无论是移动标记还是大写。 Android好像没有那个功能,有什么等价的吗?
    • 好吧,这只会移动字符串末尾的标点符号。如果我们有一个句子,标点符号会在词尾移动。例如:Bla ble bli ! => bli! ble Bla。而且大写的不行
    猜你喜欢
    • 2013-07-07
    • 2016-05-03
    • 2023-01-03
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    相关资源
    最近更新 更多