Ниже приведена моя программа.
Я пытался заменить @
, &
;
, и .
с пространством ().
Но я не могу получить правильный результат.
public static void main(String[] args) throws IOException {
final String REG_EXPR = "[!\"#$%&'()*+-./:;<=>?@\\^_{|}~',.\\[\\]–]*";
String Description="திகழ்கிறது.@;@;@;@;ஆனால் ஆனால் ";
HashSet<String> line=new HashSet<String>();
Scanner sc2 = null;
sc2 = new Scanner(Description);
while (sc2.hasNextLine()) {
Scanner s2 = new Scanner(sc2.nextLine());
boolean b;
while (s2.hasNext()) {
String s = s2.next();
String s1 = s.replaceAll(REG_EXPR, "");
s1=s1.replaceAll("[a-zA-Z0-9\\s]", "");
System.out.println("s1 value"+s1);
}
}
}
вывод
s1 valueதிகழ்கிறதுஆனால்
s1 valueஆனால்
ожидаемый результат
s1 valueதிகழ்கிறது
s1 valueஆனால்
s1 valueஆனால்
Это прекрасно работает для меня:
public static void main(String[] args) {
final String REG_EXPR = "[!\"#$%&'()*+-./:;<=>?@\\^_{|}~',.\\[\\]–]";
String description="திகழ்கிறது.@;@;@;@;ஆனால் ஆனால் ";
String s1 = description.replaceAll(REG_EXPR," ");
Scanner scanner = new Scanner(s1);
while (scanner.hasNext()){
System.out.println("s1 value " + scanner.next());
}
}
Проверьте это здесь http://ideone.com/omjhHM
Попробуйте и сделайте это:
private static final Pattern PATTERN = Pattern.compile("\\p{IsL}+");
// ...
final Matcher m = PATTERN.matcher(description);
while (m.find())
System.out.println(m.group());
Проблема в обработке класса сканера
Первый фрагмент строки, который вы получаете, - "திகழ்கிறது. @; @; @; @; ஆனால்", и он правильно выполняет регулярное выражение, а ожидаемый результат - "திகழ்கிறதுஆனால்",
Дайте пробел здесь "திகழ்கிறது. @; @; @; @; ஆனால்" и попробуйте, вы получите правильный результат.
попробуй это,
final String REG_EXPR = "[! \" # $% & '() * + -./:; <=>? @\^ _ {|} ~',.\[\] - a-zA-Z0-9\\с] ";
замените цикл while ниже,
while (s2.hasNext()) {
String s = s2.next();
String []s1 = s.split(REG_EXPR);
for(int i=0 ;i<s1.length;i++ )
if(s1[i].length()>0)
System.out.println("s1 value"+s1[i]);
}
Не забудьте избежать регулярных выражений, таких как *+?
к \\*\\+\\?
, В противном случае они будут использоваться для определения длины совпадающего образца. То есть ?
означает occurs zero or one times
, +
означает one or more times
, *
означает any times (zero, one or more)
.