我做了一个记事本,但在实现“剪切”功能时遇到了如下的问题,请各位高手不吝赐教:
首先,我发现似乎getSelectionStart()和getSelectionEnd()方法是将'\r'和'\n'两个字符考虑在内的,也就是说,如果我在TextArea组件里进行如下输入:
yangaocheng
yanghongfei
并且选中第二行的第三个字符'n'和第四个字符'g',则getSelectionStart()返回值为15,而不是13(因为第一行的最后会存在'\r'和'\n'两个字符);getSelectionEnd()返回值为17。
然后,我又发现似乎replaceRange()方法是不考虑'\r'和'\n'两个字符的,也就是说,对于replaceRange方法而言,它认为第二行第三个字符'n'的索引号为13,而不是15,所以为了实现“剪切”的功能,我写了如下的源代码片段:     
           int nS=ta.getSelectionStart();
           int nE=ta.getSelectionEnd();
             int i=0,count=0;
             String m_Text=ta.getText();  //ta是我创建的用来输入文本的TextArea组件
             while(i<nS)
             {
                if(m_Text.charAt(i)=='\r')
                    count++;
                i++;
            }
          ta.replaceRange("",nS-count*2,nE-count*2);
这段代码在大多数情况下执行得很好,但就是当剪切操作从第二行开始时(第三行、第四行、...都是这样)、并且剪切的字符串中包含这一行的头两个字符,就会发生发生剪切错位的情况。例如:以上面两行字符串为例,我如果想剪切第二行的"ang"子串,就发生剪切错位;但如果剪切第二行的"ngh"子串,就一点问题都没有。我测试了一下,似乎replaceRange()方法对于从第二行开始的、每行的头两个字符又是另外一番处理,还是以上面两行字符串为例,似乎对于replaceRange()方法而言,第二行的第二字符'a'的索引号为13(既不是考虑了'\r'和'\n'在内的14,也不是对'\r'和'\n'都不考虑的12),我真的是完全被搞糊涂了。请问各位大虾,这究竟是怎么回事呀,怎么来解决这个问题呀!