日期:2014-05-20  浏览次数:20591 次

用startsWith(pre)&endsWith(ext)过滤,关于pre的问题。。。
要过滤ab*.bmp的文件,用filename.startsWith(pre) & filename.endsWith(ext)进行过滤;pre和ext分别如下,pre 不应该是pre = filterstr.substring(0, i - 1)么?怎么回事儿呢?
public ListFilter(ab*.bmp) {
int i, j;
filterstr = filterstr.toLowerCase();
i = filterstr.indexOf("*");
j = filterstr.indexOf(".");
if (i > 0)
pre = filterstr.substring(0, i);
else if (i == -1)
if (j > 0)
pre = filterstr.substring(0, j - 1);
if (j >= 0)
ext = filterstr.substring(j + 1);
}

------解决方案--------------------
终于看懂你的问题了,其实就是pre = filterstr.substring(0, i - 1)的理解
i得到的值是对应字符串第一次出现*的下标索引,比如ab*.bmp得到的i值为2
而String.substring(i,j)方法是返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符

这样你就明白了把,返回的字符串不包括第j个字符的,所以上面用的i而不是i-1,建议你多看看JDK的API,那个讲解的更加具体细致
------解决方案--------------------
一时没懂楼主在说什么,然后知道是substring的问题,和其他怎么截取pre和ext没啥关系。
楼主对substring这个方法去查查jdk吧,“左闭右开”。