代码之家  ›  专栏  ›  技术社区  ›  esQmo_

如何处理倒排字符串上的标点符号和大写?

  •  2
  • esQmo_  · 技术社区  · 7 年前

    我从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" 把第一个字母大写,但似乎不起作用。 谢谢你的时间。

    2 回复  |  直到 7 年前
        1
  •  2
  •   Tejas Trivedi    7 年前

    试试这样的

    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);
    
        2
  •  2
  •   xingbin    7 年前

    可以使用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();