4 개의 열 (이름, 범주, 기간, 파일 크기)과 JTable의 특정 레코드를 찾기 위해 구를 입력하는 JTextField가있는 JTable이 있습니다.JTable의 단일 열을 필터링하는 정규식입니다.
나는이 방법으로 레코드를 필터링 which'd 정규식 수식이 필요할 것 :
JTable의 :
이름 | 카테고리 | 기간 | 파일 크기
Linkin.Park | 고양이 1 | 00:03:30 | 5,30
문구를 입력하면 친족 - 이름 안에 "친족"이있는 모든 노래가 표시됩니다.
phrase : lin * ar *을 입력하면 "lin"로 시작하는 모든 노래가 표시되고 그 다음에 "ar"이있는 문자가 표시됩니다.
*에 *를 입력하면 "lin"으로 시작하는 모든 노래가 표시되고 1자를 입력 한 다음 "in"을 입력 한 다음 문자를 입력합니다.
또한 JTable (name)의 첫 번째 열만 고려하면 필터가 필요합니다. 예를 들어 30 *은 30으로 시작하는 노래를 표시하지만 시작하지 않는 노래는 표시하지 않습니다. 예를 들어 3시 30 분의 지속 시간 또는 파일 크기 (예 : 7,30).
제 영어 xD는 유감입니다.
private void search(String text) {
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(tableUtwory.getModel());
tableUtwory.setRowSorter(sorter);
String regex;
if(text.startsWith("*") && text.endsWith("*")) {
String s = Pattern.quote(text.replaceAll("^\\*|\\*$", ""));
regex = "(?i).+" + s + ".+";
} else if(text.startsWith("*")) {
String s = Pattern.quote(text.replaceAll("^\\*", ""));
regex = "(?i).+" + s + "$";
} else if(text.endsWith("*")) {
String s = Pattern.quote(text.replaceAll("\\*$", ""));
regex = "(?i)^" + s + ".+";
} else {
String s = Pattern.quote(text);
regex = "(?i)^" + s + "$";
}
sorter.setRowFilter(RowFilter.regexFilter(regex));
sorter.setSortKeys(null);
}
을하지만 삽입 할 경우 (예 : 린 * AR *에 대한) 문자 사이에 "*"어떤 결과를 반환하지 않으며, 난 몰라 :
지금은 검색의 종류가 "?"를 사용할 수있는 옵션이 있습니다.
: 지금은 다른 열을 생각 나는 입력 "30 *"그것은 또한 크기 나 지속 시간이 질문의 30
와일드 카드 일치를 원합니다. 몇 가지 아이디어에 대해서는이 질문을 참조하십시오. http : // stackoverflow.com-questions-1247772/java-util-regex-for-glob-type 패턴과 동일합니다. 좀 더 구체적인 도움이 필요하면 문제에 대해 좀 더 구체적으로 설명해야한다고 덧붙여 야합니다. [최소한의 작업 예제] (http://www.sscce.org/)는 좋을 것입니다. – MattLBeck
이 작업을 수행하기 위해 귀하의 노력은 보이지 않습니다. 이것은 "나는 이것과 저것, 그리고 저것을 원한다"고 말할 수있는 사이트가 아닙니다 ... 우리는 당신의 노력을보아야 만합니다 ... –