本帖最后由 Evenque 于 2010-12-15 09:42:26 编辑

解决方案 »

  1.   

    /**
     * 取得文档中指定位置上指定长度的字符串. 
     * @param offset 指定位置
     * @param length 指定长度
     * @return offset开始length长度的字符串,如果超出允许范围[0, doc.getLength()],则返回长度为0的字符串;
     */
    public String getString(int offset, int length) {
    Document doc = getDocument();
    if (offset >= 0 && offset + length <= doc.getLength()) {
    try {
    return doc.getText(offset, length);
    } catch (BadLocationException e) {
    System.err.println("在文档中截取文本时,坐标越限!");
    e.printStackTrace();
    return "";
    }
    } else {
    return "";
    }
    }
    /**
     * 判断pos处是否为单词(字母、数字及下划线) 
     * @param pos >=0
     * @return true or false
     */
    public boolean isWord(int pos) {
    char ch = getCharAt(pos);
    if (Character.isLetter(ch) || Character.isDigit(ch) || ch == '_') {
    return true;
    }
    return false;
    }
    /**
     * 向前找到单词开始(非单词字符) 
     * @param pos >=0
     * @return 找到的位置
     */
    public int indexOfWordStart(int pos) {
    for (; pos > 0 && isWord(pos - 1); --pos)
    ;
    return pos;
    }看了下楼主的要求
    找了个我写的程序中的几个方法
    不一定完整,不过楼主可以参考下
      

  2.   

    /**
     * 取得文档中指定位置上的字符. 
     * @param pos 指定位置
     * @return pos处的字符,如果pos超出允许范围[0, doc.getLength()],则返回 '\r'
     */
    public char getCharAt(int pos) {
    Document doc = getDocument();
    if (pos < doc.getLength() && pos >= 0) {
    return getString(pos, 1).charAt(0);
    } else {
    return '\r';
    }
    }果然少了一个……
      

  3.   

    谢谢。我现在就是有个问题,比如:
    offset = jTextArea.getCaretPosition();
    doc.getText(offset, 2);这个都抛出BadLocationException异常,而我的文本框内的字符肯定大于2的啊。
    我这边貌似getText只能用getText(pos,1)....
      

  4.   

    To sunyiz,
    你的往前找单词的方法比我的好,通过判断pos处是否为单词(字母、数字及下划线),而我是判断是否为" ",谢谢啦。看你的getString(int offset, int length)方法,我突然明白了,offset是单词开始的位置,length是单词的长度。
    我在使用doc.getText(offset, length)时,offset都是当前输入点(就是单词的末尾),怪不到老抛BadLocationException异常呢。
      

  5.   

    offset = jTextArea.getCaretPosition();
    doc.getText(offset, 2);是从你的光标位置向后截2个了,
    是不是你光标在文本结束处?
    这样肯定异常嘛,
    你先从光标位置向前找到单词开始处
    再从单词开始处向后找