JTextArea的问题 本帖最后由 Evenque 于 2010-12-15 09:42:26 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 /** * 取得文档中指定位置上指定长度的字符串. * @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; }看了下楼主的要求找了个我写的程序中的几个方法不一定完整,不过楼主可以参考下 /** * 取得文档中指定位置上的字符. * @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'; } }果然少了一个…… 谢谢。我现在就是有个问题,比如:offset = jTextArea.getCaretPosition();doc.getText(offset, 2);这个都抛出BadLocationException异常,而我的文本框内的字符肯定大于2的啊。我这边貌似getText只能用getText(pos,1).... To sunyiz,你的往前找单词的方法比我的好,通过判断pos处是否为单词(字母、数字及下划线),而我是判断是否为" ",谢谢啦。看你的getString(int offset, int length)方法,我突然明白了,offset是单词开始的位置,length是单词的长度。我在使用doc.getText(offset, length)时,offset都是当前输入点(就是单词的末尾),怪不到老抛BadLocationException异常呢。 offset = jTextArea.getCaretPosition();doc.getText(offset, 2);是从你的光标位置向后截2个了,是不是你光标在文本结束处?这样肯定异常嘛,你先从光标位置向前找到单词开始处再从单词开始处向后找 Java中scroll pane的使用(一)-- 动态改变其client的大小 javaBean 和 Model 的关系? swt 导出.jar文件 的问题 test= constructor.newInstance(new Object[]{name})中new Object[]{name}是什么意思? oracle 和 tomcat 的端口冲突怎么解决 java工厂模式 接口 请教:如何让JTree的节点显示不同的图标? 5分钟,得100分,来者有分 如何比较两个文件的差别,高分相送,如有源程序可给Money!!! 谁能帮我解决这个一个字符串变成一维字符串数组的问题 java小程序
* 取得文档中指定位置上指定长度的字符串.
* @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;
}看了下楼主的要求
找了个我写的程序中的几个方法
不一定完整,不过楼主可以参考下
* 取得文档中指定位置上的字符.
* @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';
}
}果然少了一个……
offset = jTextArea.getCaretPosition();
doc.getText(offset, 2);这个都抛出BadLocationException异常,而我的文本框内的字符肯定大于2的啊。
我这边貌似getText只能用getText(pos,1)....
你的往前找单词的方法比我的好,通过判断pos处是否为单词(字母、数字及下划线),而我是判断是否为" ",谢谢啦。看你的getString(int offset, int length)方法,我突然明白了,offset是单词开始的位置,length是单词的长度。
我在使用doc.getText(offset, length)时,offset都是当前输入点(就是单词的末尾),怪不到老抛BadLocationException异常呢。
doc.getText(offset, 2);是从你的光标位置向后截2个了,
是不是你光标在文本结束处?
这样肯定异常嘛,
你先从光标位置向前找到单词开始处
再从单词开始处向后找