그리고 문제는 IDE (내 IntelliJ IDEA)에서 프로그램을 테스트 할 때 모든 것이 정상입니다. 특히 regex는 테스트 파일에서 키릴 문자와 함께 작동합니다.
하지만 내 프로그램 (Maven)을 빌드하고 동일한 테스트 파일로 .jar 파일을 테스트했을 때, 가장 가능성있는 정규식이 키릴 문자로 작동하지 않는다는 것이 밝혀졌습니다.
그런 다음 Windows 1251 인코딩의 파일로 다시 테스트 한 결과 작동했습니다.
그럼 내 질문은 - IDE에서와 마찬가지로 UTF-8 파일로 .jar를 어떻게 만들 수 있습니까?
미리 감사드립니다.
[갱신 1]
two test files, one in UTF-8 and another in Windows 1251
내가이 같은 \ U 코드로 키릴 문자를 대체하려고했습니다:
private static final String FILE_PATTERN = "((\\s*\".*\\u041E\\u0442\\u0434\\u0435\\u043B .*\"\\R)([^\"].* (?!-)\\d+\\s*)+)+";
이 작동하지 않습니다 :(
[UPDATE2]
파일 처리는 다음과 같이 시작 :이 같은
static void processFile(String inputFile) {
try {
String fileStr = FileHandler.readFile(inputFile).toString();
if (!FileParser.validateFile(fileStr)) {
System.out.println("Sorry, input file format is invalid");
...
파일의 유효성을 검사 외모 :
public class FileParser {
private static final String FILE_PATTERN = "((\\s*\".*Отдел .*\"\\R)([^\"].* (?!-)\\d+\\s*)+)+";
public static boolean validateFile(String fileStr) {
return Pattern.compile(FILE_PATTERN).matcher(fileStr).matches();
}
...
파일 읽기는 매우 일반적인 생각 :
public class FileHandler {
public static StringBuilder readFile(String fileName) {
StringBuilder res = new StringBuilder();
String temp;
try (BufferedReader r = new BufferedReader(new FileReader((fileName)))) {
while ((temp = r.readLine()) != null) {
res.append(temp).append("\n");
}
} catch (FileNotFoundException e) {
System.out.println("Input file not found!");
} catch (IOException e) {
// log exception
}
return res;
}
...
다른 환경에서 테스트 파일이 인코딩되는 방식 (또는 인코딩 된 것으로 가정)은 문제가있는 것 같습니다. 그것을 확인하려면 [mcve]가 필요합니다. –
유니 코드 표현을 \ uxxxx와 함께 사용해 볼 수 있습니다. 여기서 xxxx는 charecter의 유니 코드 16 진수 값입니다. – Skgland
이 Documantation 페이지 [Java Doc Pattern Class]의 유니 코드 지원 섹션 (https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern)을 살펴볼 수도 있습니다. .html) – Skgland