我正在提供设施,以便在我的小型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中为我提供基本文本格式的准备代码,对我来说也会有所帮助。
答案 0 :(得分:0)
我认为ReplaceFirst将取代第一次出现。
如果所选的SubString不是第一个,那么它将不起作用,
我认为最好使用,
text = text.substring(0,startSelection-1)+"<b>" + selectedText + "</b>"+text.substring(endSelection,text.length());
希望它能奏效:)