powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Поиск русских слов на java
19 сообщений из 19, страница 1 из 1
Поиск русских слов на java
    #38492991
Fyn2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята, посмотрите плиз на код..Английские слова ищет прекрасно, а русские когда вводишь в поиск, не понимает он их-не находит в заданном разделе! как тут надо и что передать в inputstreamreader или дело в response??вот код логики поиска:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
public class Search {
	
	private String word;
	private String str="";
	private String str2="";
		
	        public String getWord() {
			return word;
		}

		public void setWord(String word) {
			this.word = word;
		}
		public String getStr() {
			return str;
		}

		public void setStr(String str) {
			this.str = str;
		}
		public String getStr2() {
			return str2;
		}

		public void setStr2(String str2) {
			this.str2 = str2;
		}
	    private final Pattern TITLE = Pattern.compile("\\<title\\>(.*)\\<\\/title\\>", Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
	    
	    public String search(String url, String someword) {
	    	
	        try {
	            InputStreamReader in = new InputStreamReader(new URL(url).openStream());
	            StringBuilder input = new StringBuilder();
	            int ch;
	            while ((ch = in.read()) != -1) {
	                input.append((char) ch);
	            }
	            if (Pattern.compile(someword, Pattern.CASE_INSENSITIVE).matcher(input).find()) {
	                Matcher title = TITLE.matcher(input);
	                if (title.find()) {
	                    return title.group(1);
	                }
	            }
	        } catch (IOException e) {
	            e.printStackTrace();
	        } catch (PatternSyntaxException e) {
	            e.printStackTrace();
	        }
	        return null;
	    }
	    public String toString(){
	    	String[] argi = {"http://localhost:8080/site/endipnagradi"};
	    	String[] argi2 = {"http://localhost:8080/site/dipnagradi"};
	    	for (int i = 0; i < argi.length; i++) {
            String result = search(argi[i], word);
            if (result != null) {

            		str += "Search phrase " + "<b>"+ word + "</b>" + " have found " + "<a href=\"" + argi[i] + "\">" + result + "</a>"+ "<p></p>";
            }
            else  {
            	
            	str="Search word not found!";
            }   
            if (word == null||word=="") {
            	
            	str = "Enter the search word!";
            	str2 = "Введите слово для поиска!";
        		
            }
            }
	    	for (int i = 0; i < argi2.length; i++) {

	            String result2 = search(argi2[i], word);

	            if (result2 != null) {

			
str2 += "Поисковая фраза " + "<b>"+ word + "</b>" + " найдена в разделе " + "<a href=\"" + argi2[i] + "\">" + result2 + "</a>"+ "<p></p>";
 }
	            else{
	            	str2="Запрашиваемое слово не найдено!";
	            }    
	            
	            if (word == null||word=="") {
	            	
	            	str = "Enter the search word!";
	            	str2 = "Введите слово для поиска!";
	        		
	             }
	           }
		return null;
  }
}
...
Рейтинг: 0 / 0
Поиск русских слов на java
    #38493013
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fyn2013,

Измененный вариант метода search() :
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public String search(String url, String someword, String encoding) {
    
    try {
        InputStreamReader in = new InputStreamReader(new URL(url).openStream(), encoding);
        StringBuilder input = new StringBuilder();
        int ch;
        while ((ch = in.read()) != -1) {
            input.append((char) ch);
        }
        if (Pattern.compile(someword, Pattern.CASE_INSENSITIVE).matcher(input).find()) {
            Matcher title = TITLE.matcher(input);
            if (title.find()) {
                return title.group(1);
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    } catch (PatternSyntaxException e) {
        e.printStackTrace();
    }
    return null;
}    

Пример использования:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
for (String url: new String[] { "http://www.yandex.ru", "http://www.rambler.ru", "http://opennet.ru", "http://www.lib.ru" }) {
    for (String cs: new String[] { "UTF-8", "Cp866", "KOI8_R", "Cp1251" }) {
        String title = search(url, "Поиск", cs);
        if (title != null) {
            System.out.println(cs + " : " + title);
            break;
        }
    }
}
...
Рейтинг: 0 / 0
Поиск русских слов на java
    #38493015
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работает, но очень не оптимально.
Попытайтесь исправить сами.
...
Рейтинг: 0 / 0
Поиск русских слов на java
    #38493027
Fyn2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,

у меня не работает..(( а какая при этом в jsp должна быть кодировка или кодировки?
я исправил и у меня пишет что Запрашиваемое слово не найдено когда я ввожу русское слово в поиск, хотя оно есть в том разделе...английский же вариант работает и находит
...
Рейтинг: 0 / 0
Поиск русских слов на java
    #38493032
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fyn2013у меня не работает..((Должно работать.Fyn2013а какая при этом в jsp должна быть кодировка или кодировки?Лучше UTF-8Fyn2013я исправил и у меня пишет что Запрашиваемое слово не найдено когда я ввожу русское слово в поискНужно поглядеть на Ваш исправленный вариант
...
Рейтинг: 0 / 0
Поиск русских слов на java
    #38493035
Fyn2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,

на скорую руку исправил чтобы посмотреть как помогло, но поиск не видет запрашиваемоё русское слово..может надо было ещё в inputstreamreder-e перекодировать?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
public class Search {
	
	private String word;
	private String str="";
	private String str2="";
		
	public String getWord() {
			return word;
		}

		public void setWord(String word) {
			this.word = word;
		}
		public String getStr() {
			return str;
		}

		public void setStr(String str) {
			this.str = str;
		}
		public String getStr2() {
			return str2;
		}

		public void setStr2(String str2) {
			this.str2 = str2;
		}
	    private final Pattern TITLE = Pattern.compile("\\<title\\>(.*)\\<\\/title\\>", Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
	    
	    public String search(String url, String someword, String encoding) {
	        
	        try {
	            InputStreamReader in = new InputStreamReader(new URL(url).openStream(), encoding);
	            StringBuilder input = new StringBuilder();
	            int ch;
	            while ((ch = in.read()) != -1) {
	                input.append((char) ch);
	            }
	            if (Pattern.compile(someword, Pattern.CASE_INSENSITIVE).matcher(input).find()) {
	                Matcher title = TITLE.matcher(input);
	                if (title.find()) {
	                    return title.group(1);
	                }
	            }
	        } catch (IOException e) {
	            e.printStackTrace();
	        } catch (PatternSyntaxException e) {
	            e.printStackTrace();
	        }
	        return null;
	    }    
	    public String toString(){
	    	String[] argi = {"http://localhost:8080/site/endipnagradi"};
	    	String[] argi2 = {"http://localhost:8080/site/dipnagradi"};
	  for (int i = 0; i < argi.length; i++) {
	    for (String cs: new String[] { "UTF-8", "Cp866", "KOI8_R", "Cp1251" }) {
            String result = search(argi[i], word, cs);
            if (result != null) {

            		str += "Search phrase " + "<b>"+ word + "</b>" + " have found " + "<a href=\"" + argi[i] + "\">" + result + "</a>"+ "<p></p>";
            }
            else  {
            	
            	str="Search word not found!";
            }   
            if (word == null||word=="") {
            	
            	str = "Enter the search word!";
            	str2 = "Введите слово для поиска!";
            }	
            }
            }
	    for (int i = 0; i < argi2.length; i++) {
	    	for (String cs: new String[] { "UTF-8", "Cp866", "KOI8_R", "Cp1251" }) {
	            
	    		String result2 = search(argi2[i], word, cs);

	            if (result2 != null) {

			
	str2 += "Поисковая фраза " + "<b>"+ word + "</b>" + " найдена в разделе " + "<a href=\"" + argi2[i] + "\">" + result2 + "</a>"+ "<p></p>";
 }
	            else{
	            	str2="Запрашиваемое слово не найдено!";
	            }    
	            
	            if (word == null||word=="") {
	            	
	            	str = "Enter the search word!";
	            	str2 = "Введите слово для поиска!";
	            }
	            }
	            }
		return null;

        }
	    
	}
...
Рейтинг: 0 / 0
Поиск русских слов на java
    #38493037
Fyn2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и в jsp

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<c:if test="${pageContext.response.locale eq 'ru'}">
         <center><b>Поиск</b></center><p></p>
	<c:forEach items="${contactForm.str2}" var="str2">

               <p>${str2}</p>
			
		</c:forEach>
				</c:if>
				
			<c:if test="${pageContext.response.locale eq 'en'}">
			<center><b>Search</b></center><p></p>
					<c:forEach items="${contactForm.str}" var="str">
			
			<p>${str}</p>
			
		</c:forEach>
				</c:if>  
...
Рейтинг: 0 / 0
Поиск русских слов на java
    #38493042
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fyn2013,

Код: java
1.
2.
3.
4.
5.
6.
if (result != null) {
    str += "Search phrase " + ...;
    break;
} else {
    str2="Запрашиваемое слово не найдено!";
}
...
Рейтинг: 0 / 0
Поиск русских слов на java
    #38493048
Fyn2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,

у меня str - для вывода найденных английских слов, а str2 - для русских..суть не в break, а в том, что вводимое в поиск русское слово не находится, хотя оно есть в разделе по url-у http://localhost:8080/site/dipnagradi
...
Рейтинг: 0 / 0
Поиск русских слов на java
    #38493052
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fyn2013,

Ашыпся при копи-пасте )))

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
if (result != null) {
    str += "Search phrase "...
    break;
}
...
if (result2 != null) {
    str2 += "Поисковая фраза "...
    break;
}
...


Fyn2013суть не в break break нужен. (после нахождения фразы нужно выйти из цикла)
...
Рейтинг: 0 / 0
Поиск русских слов на java
    #38493055
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fyn2013что вводимое в поиск русское слово не находится
Код: sql
1.
2.
3.
4.
Search phrase <b>Поиск</b> have found <a href="http://www.yandex.ru">Яндекс</a><p></p>
Search phrase <b>Поиск</b> have found <a href="http://www.rambler.ru">Рамблер</a><p></p>
Search phrase <b>Поиск</b> have found <a href="http://opennet.ru">OpenNet без "www" - минималистский вариант портала по открытому ПО, Linux, BSD и Unix системам</a><p></p>
Search phrase <b>Поиск</b> have found <a href="http://www.lib.ru">Lib.Ru: Библиотека Максима Мошкова</a><p></p>

...
Рейтинг: 0 / 0
Поиск русских слов на java
    #38493056
Fyn2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,

ок, добавил брик туда) но мой вопрос это не решило((поиск то не видит вводимого рашн слово((
...
Рейтинг: 0 / 0
Поиск русских слов на java
    #38493057
Fyn2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,

у вас получилось? пришлите пожалуйста полностью вашу jsp страничку
...
Рейтинг: 0 / 0
Поиск русских слов на java
    #38493063
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fyn2013,

Консольное приложение:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
String[] argi = {"http://www.yandex.ru", "http://www.rambler.ru", "http://opennet.ru", "http://www.lib.ru"};
for (int i = 0; i < argi.length; i++) {
    for (String cs : new String[] { "UTF-8", "Cp866", "KOI8_R", "Cp1251" }) {
        String result = search(argi[i], word, cs);
        if (word == null || word == "") {
            str = "Enter the search word!";
        }
        if (result != null) {
            str = "Search phrase " + "<b>" + word + "</b>"
                    + " have found " + "<a href=\"" + argi[i] + "\">"
                    + result + "</a>" + "<p></p>";
            break;
        } else {
            str = "Search word not found!";
        }
    }
    System.out.println(str);
}
...
Рейтинг: 0 / 0
Поиск русских слов на java
    #38493064
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
String str = "";
String word = "Поиск";
...
Рейтинг: 0 / 0
Поиск русских слов на java
    #38493176
Fyn2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,

в консоли он у меня находит
Код: java
1.
2.
Search phrase <b>Поиск</b> have found <a href="http://www.yandex.ru">Яндекс</a><p></p>
Search phrase <b>Поиск</b> have found <a href="http://www.rambler.ru">Рамблер</a><p></p>



но в браузере пишет Запрашиваемое слово не найдено! Почему так может быть??
...
Рейтинг: 0 / 0
Поиск русских слов на java
    #38493200
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fyn2013,

Возможно класс Search неправильно работает, либо в JSTL-разметке что-то не так.
...
Рейтинг: 0 / 0
Поиск русских слов на java
    #38495536
Fyn2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,

получилось найти русские слова уже, везде выставил UTF-8 - и в pom.xml и в web.xml тоже
Но осталось подправить логику ещё..можете помочь? просто когда в массиве argi более одного раздела, он только начинает искать со второго раздела в массиве, хотя выставлено ж по всем пройтись от нуля..

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
public class Search {
	
	private String word;
	private String str="";;
		
	public String getWord() {
			return word;
		}

		public void setWord(String word) {
			this.word = word;
		}
		public String getStr() {
			return str;
		}

		public void setStr(String str) {
			this.str = str;
		}

	    private final Pattern TITLE = Pattern.compile("\\<title\\>(.*)\\<\\/title\\>", Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
	    
	    public String search(String url, String someword) {
	    	
	        try {
	            InputStreamReader in = new InputStreamReader(new URL(url).openStream(),"UTF-8");
	            StringBuilder input = new StringBuilder();
	            int ch;
	            while ((ch = in.read()) != -1) {
	                input.append((char) ch);
	            }
	            if (Pattern.compile(someword, Pattern.CASE_INSENSITIVE).matcher(input).find()) {
	                Matcher title = TITLE.matcher(input);
	                if (title.find()) {
	                    return title.group(1);
	                }
	            }
	        } catch (IOException e) {
	            e.printStackTrace();
	        } catch (PatternSyntaxException e) {
	            e.printStackTrace();
	        }
	        return null;
	    }
	    public String toString(){
	
	    	String[] argi = {"http://localhost:8080/site/dipnagradi","http://localhost:8080/site/contacts"};
            
	    	for (int i = 0; i < argi.length; i++) {

	            String result = search(argi[i], word);

	            if (result != null) {

			
	str+= "Поисковая фраза " + "<b>"+ word + "</b>" + " найдена в разделе " + "<a href=\"" + argi[i] + "\">" + result + "</a>"+ "<p></p>";

 }
	            else{
	            	str="Запрашиваемое слово не найдено!";
	            }    

	            if (word == null||word=="") {

	            	str = "Введите слово для поиска!";
	        		

                }
	    }
		return null;

          }
	    
    }
...
Рейтинг: 0 / 0
Поиск русских слов на java
    #38495936
Fyn2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
отменяю, уже разобрался!но вы тоже до этого сделали большой вклад в это, за что говорю спасибо!
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Поиск русских слов на java
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]