替换字符串中子字符串的一个特定出现

时间:2018-02-12 10:11:01

标签: java android string

我正在提供设施,以便在我的小型Android项目中选择文本 B I 等基本格式化选项。

我需要使用所选的格式化选项更改所选文本,但会发生的是我的函数用替换文本替换所有出现的所选子字符串。

这是我对其中一个格式选项的函数:

//Make selectedText bold
bold.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            //Gets selection text's start and end position
            int startSelection = etText.getSelectionStart();
            int endSelection = etText.getSelectionEnd();

            text = String.valueOf((new SpannableString(etText.getText())));

            /*This is just to make sure selected string does not end up with 
              negative length */                 
            if (startSelection > endSelection) {
                startSelection = etText.getSelectionEnd();
                endSelection = etText.getSelectionStart();
            }

            //Stores the text selected by user in a string.
            String selectedText = etText.getText().toString().substring(startSelection, endSelection);

            if (!selectedText.isEmpty()) {
                /*Here selectedText is replaced with formattedText using replace function which maybe causing the replacement of all occurrences in text.*/
                text = text.replace(selectedText, "<b>" + selectedText + "</b>");
                etText.setText(Html.fromHtml(text));
            }
        }
    });

我需要一个函数(内置或用户定义),它只替换一个字符串中匹配的子字符串,而不是全部。

如果可以在android中为我提供基本文本格式的准备代码,对我来说也会有所帮助。

1 个答案:

答案 0 :(得分:0)

  

我认为ReplaceFirst将取代第一次出现。

如果所选的SubString不是第一个,那么它将不起作用,

我认为最好使用,

text = text.substring(0,startSelection-1)+"<b>" + selectedText + "</b>"+text.substring(endSelection,text.length());

希望它能奏效:)