Java 如何从一个没有重音的单词中提取所有强调的单词?
我正在尝试创建一个java程序,允许我打开路径在参数中的文件。Java 如何从一个没有重音的单词中提取所有强调的单词?,java,Java,我正在尝试创建一个java程序,允许我打开路径在参数中的文件。 当我的路径像:“C:\telephone1\”并且文件夹的名称是“telephone1”时,一切都正常工作。 但是如果文件夹名为“téléphone1”(重音),我不想在脚本中找到它。 这是对程序说:您必须测试: -电话线 -télephonne -泰利丰 -泰利丰 -tèlephonne -泰勒丰 -tèlèphonnè -泰勒丰 -… 然后脚本将找到它。 ?使用java.text.Normalizer删除重音符号: s = N
当我的路径像:“C:\telephone1\”并且文件夹的名称是“telephone1”时,一切都正常工作。
但是如果文件夹名为“téléphone1”(重音),我不想在脚本中找到它。
这是对程序说:您必须测试:
-电话线
-télephonne
-泰利丰
-泰利丰
-tèlephonne
-泰勒丰
-tèlèphonnè
-泰勒丰
-…
然后脚本将找到它。
?使用java.text.Normalizer删除重音符号:
s = Normalizer.normalize(s, Normalizer.Form.NFKD).replaceAll("\\p{M}", "");
这用e
加上零宽度锐化标记来替代单个代码点ee
。然后删除所有“组合变音符号”
规范化:因为单个“字符”存在不同的Unicode码点序列
虽然两个这样的规范化文本可以进行比较,但模式可以如下所示
String regexPattern = Pattern.quote(s)
.replace("e", "[eéèê]")
.replace("u", "[ùúû]")
.replace("oe", "(oe|œ)")
... ;
Pattern pattern = Pattern.compile(regexPattern);
使用java.text.Normalizer删除重音符号:
s = Normalizer.normalize(s, Normalizer.Form.NFKD).replaceAll("\\p{M}", "");
这用e
加上零宽度锐化标记来替代单个代码点ee
。然后删除所有“组合变音符号”
规范化:因为单个“字符”存在不同的Unicode码点序列
虽然两个这样的规范化文本可以进行比较,但模式可以如下所示
String regexPattern = Pattern.quote(s)
.replace("e", "[eéèê]")
.replace("u", "[ùúû]")
.replace("oe", "(oe|œ)")
... ;
Pattern pattern = Pattern.compile(regexPattern);
也许可以编一本字典,如果脚本找不到重音,试着用“téléphonne”(保存在变量中的单词)替换“telephone”。也许可以编一本字典,如果脚本找不到重音,试着用“téléphonne”(保存在变量中的单词)替换“telephone”。好的,因此,可以使用一些正则表达式和文件过滤器对其进行清理和优化。查看文档以了解更多信息。您可能会创建一个
FileFilter
,并将其传递到File.listFiles(FileFilter)方法中,以仅检索要执行某些操作的目录。然而,为了创建一个简单的选项示例,我正在进行基本的字符串解析,然后手动创建文件对象
下面的程序将创建所需目录的文件
对象。然后,它将查看该目录中的所有文件(如果有)。它将为从原始父目录中找到的每个子目录创建一个新的文件
对象,如果它是一个目录,它将把所有特殊的e字符交换为常规的e字符,并检查它是否以电话
开头,然后执行一些逻辑。在这种情况下,只需打印出原始目录名
import java.io.*;
public class DirectoryFinder{
public static void main(String args[]){
File dir = new File("/Users/myuser/Downloads/sojava/");
String[] children = dir.list();
if (children != null && children.length > 0) {
for(int i = 0; i < children.length; i++) {
File file = new File(children[i]);
if (file.isDirectory()) {
String modifiedName = file.getName().toLowerCase();
modifiedName = modifiedName.replaceAll("é", "e");
modifiedName = modifiedName.replaceAll("è", "e");
if (modifiedName.startsWith("telephonne")) {
// do some stuff with file.getName() which is the original file name
System.out.println("file.getName(): " + file.getName());
}
}
}
}
}
}
我希望这有助于为您指明正确的方向。好的,因此可以使用一些正则表达式和文件过滤器对其进行清理和优化。查看文档以了解更多信息。您可能会创建一个
FileFilter
,并将其传递到File.listFiles(FileFilter)方法中,以仅检索要执行某些操作的目录。然而,为了创建一个简单的选项示例,我正在进行基本的字符串解析,然后手动创建文件对象
下面的程序将创建所需目录的文件
对象。然后,它将查看该目录中的所有文件(如果有)。它将为从原始父目录中找到的每个子目录创建一个新的文件
对象,如果它是一个目录,它将把所有特殊的e字符交换为常规的e字符,并检查它是否以电话
开头,然后执行一些逻辑。在这种情况下,只需打印出原始目录名
import java.io.*;
public class DirectoryFinder{
public static void main(String args[]){
File dir = new File("/Users/myuser/Downloads/sojava/");
String[] children = dir.list();
if (children != null && children.length > 0) {
for(int i = 0; i < children.length; i++) {
File file = new File(children[i]);
if (file.isDirectory()) {
String modifiedName = file.getName().toLowerCase();
modifiedName = modifiedName.replaceAll("é", "e");
modifiedName = modifiedName.replaceAll("è", "e");
if (modifiedName.startsWith("telephonne")) {
// do some stuff with file.getName() which is the original file name
System.out.println("file.getName(): " + file.getName());
}
}
}
}
}
}
我希望这有助于为您指明正确的方向。我终于找到了解决方法!这是我的代码,以防有人需要它:
package ouvrirDossier;
import java.awt.Dimension;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
public class ouvrirDossier{
private static String path;
private static final JOptionPane optionPane = new JOptionPane(
"The only way to close this dialog is by\n"
+ "pressing one of the following buttons.\n"
+ "Do you understand?",
JOptionPane.QUESTION_MESSAGE,
JOptionPane.YES_NO_OPTION);
public static void main(String[] args){
// ON CREE LE CHEMIN D'ACCES AU DOSSIER EN COLLANT TOUT LES BOUS.
path = "A:\\";
if(args.length>0){
int cpt;
for(cpt = 1;cpt<args.length;cpt++){
if( cpt == 0)
path += args[cpt].replaceAll(";"," ");
else{
if(cpt==1)
path += args[cpt].replaceAll(";"," ");
else
path += "\\"+args[cpt].replaceAll(";"," ");
}
}
}
//ouvrirAlerte(path);
// ON REGARDE SI LE DOSSIER EXISTE
if(ouvrirDossier(path) == false){
String chemin = "";
String cheminTemp = "";
boolean okMatch = false;
boolean trouve = false;
String[] etages = path.split("\\\\");
outerloop:
for(int a=1; a<etages.length; a++){
if(trouve == false){
chemin = "";
cheminTemp = "";
for(int b=0; b<a; b++){
chemin += etages[b]+"\\";
}
//System.out.println(chemin);
File theDir = new File(chemin);
if(!theDir.exists()){
for(int b=0; b<a-1; b++){
cheminTemp += etages[b]+"\\";
}
File theDirTemp = new File(cheminTemp);
//System.out.println(chemin);
//System.out.println(cheminTemp);
ArrayList<String> noms = new ArrayList<String>(Arrays.asList(theDirTemp.list()));
okMatch = false;
for(int c=0; c<noms.size(); c++){
String regexPattern = Pattern.quote(etages[a-1])
.replace("é", "[eéèêë]")
.replace("u", "[ùúûü]")
.replace("oe", "(oe|œ)")
.replace("a", "[aàâä]");
Pattern pattern = Pattern.compile(regexPattern);
Matcher matcher = pattern.matcher(noms.get(c));
while(matcher.find()){
okMatch = true;
etages[a-1] = noms.get(c+1);
/*
String test = "";
for(int e=0; e<etages.length; e++){
test += etages[e]+"\\";
}
*/
a--;
//System.out.println(test);
}
}
if(!okMatch)
break outerloop;
}
if(a == etages.length-1 && theDir.exists())
trouve = true;
}
}
if(trouve){
ouvrirDossier(chemin);
}
else{
int selectedOption = JOptionPane.showConfirmDialog(null,
"Le dossier que vous tentez d'ouvrir ("+path+")ne semble pas exister, voulez vous le créer ?",
"SPB - Le dossier n'existe pas",
JOptionPane.YES_NO_OPTION);
if (selectedOption == JOptionPane.YES_OPTION){
if(args[0].equals("T")){
new File(path).mkdirs();
new File(path+"/Support/Doc").mkdirs();
new File(path+"/Support/Dev").mkdirs();
// ------------->
new File(path).mkdirs();
new File(path+"/Courriel").mkdirs();
new File(path+"/Courriel/Entrant").mkdirs();
new File(path+"/Courriel/Sortant").mkdirs();
new File(path+"/Document de Base").mkdirs();
new File(path+"/Document Intermediaire").mkdirs();
new File(path+"/Donnee").mkdirs();
new File(path+"/Donnee/Dsr").mkdirs();
new File(path+"/Donnee/Dsi").mkdirs();
new File(path+"/Livrable").mkdirs();
new File(path+"/Programme").mkdirs();
}
else if(args[0].equals("P")){
new File(path).mkdirs();
new File(path+"/Support/Doc").mkdirs();
new File(path+"/Support/Dev").mkdirs();
}
ouvrirDossier(path);
}
}
}
}
private static boolean ouvrirDossier(String chemin){
File theDir = new File(chemin);
//System.out.println(chemin);
if(theDir.exists()){
// SI OUI ON L'OUVRE
try{
Runtime runTime = Runtime.getRuntime();
Process process = runTime.exec("explorer "+chemin);
}
catch (IOException e){
e.printStackTrace();
}
return true;
}
return false;
}
public static void ouvrirAlerte(String texte){
JFrame frame = new JFrame("SPB");
frame.setPreferredSize(new Dimension(1270, 100));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel label1 = new JLabel(texte);
frame.add(label1);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public int nbLettre(char lettre, String mot){
int resultat = 0;
for(int a=0; a<mot.length(); a++){
if(mot.substring(a, a+1).equals(lettre)){
resultat++;
}
}
return resultat;
}
}
包ouvrirDossier;
导入java.awt.Dimension;
导入java.io.File;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JOptionPane;
公共类乌夫里多西耶酒店{
私有静态字符串路径;
专用静态最终作业窗格选项窗格=新建作业窗格(
“关闭此对话框的唯一方法是\n”
+“按下列按钮之一。\n”
+“你明白吗?”,
JOptionPane.QUESTION\u消息,
JOptionPane.YES\u NO\u选项);
公共静态void main(字符串[]args){
//在工厂的档案库上。
path=“A:\\”;
如果(参数长度>0){
int cpt;
对于(cpt=1;cpt,以及所有帮助我的人:-D我终于找到了方法!这是我的代码,以防有人需要它:
package ouvrirDossier;
import java.awt.Dimension;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
public class ouvrirDossier{
private static String path;
private static final JOptionPane optionPane = new JOptionPane(
"The only way to close this dialog is by\n"
+ "pressing one of the following buttons.\n"
+ "Do you understand?",
JOptionPane.QUESTION_MESSAGE,
JOptionPane.YES_NO_OPTION);
public static void main(String[] args){
// ON CREE LE CHEMIN D'ACCES AU DOSSIER EN COLLANT TOUT LES BOUS.
path = "A:\\";
if(args.length>0){
int cpt;
for(cpt = 1;cpt<args.length;cpt++){
if( cpt == 0)
path += args[cpt].replaceAll(";"," ");
else{
if(cpt==1)
path += args[cpt].replaceAll(";"," ");
else
path += "\\"+args[cpt].replaceAll(";"," ");
}
}
}
//ouvrirAlerte(path);
// ON REGARDE SI LE DOSSIER EXISTE
if(ouvrirDossier(path) == false){
String chemin = "";
String cheminTemp = "";
boolean okMatch = false;
boolean trouve = false;
String[] etages = path.split("\\\\");
outerloop:
for(int a=1; a<etages.length; a++){
if(trouve == false){
chemin = "";
cheminTemp = "";
for(int b=0; b<a; b++){
chemin += etages[b]+"\\";
}
//System.out.println(chemin);
File theDir = new File(chemin);
if(!theDir.exists()){
for(int b=0; b<a-1; b++){
cheminTemp += etages[b]+"\\";
}
File theDirTemp = new File(cheminTemp);
//System.out.println(chemin);
//System.out.println(cheminTemp);
ArrayList<String> noms = new ArrayList<String>(Arrays.asList(theDirTemp.list()));
okMatch = false;
for(int c=0; c<noms.size(); c++){
String regexPattern = Pattern.quote(etages[a-1])
.replace("é", "[eéèêë]")
.replace("u", "[ùúûü]")
.replace("oe", "(oe|œ)")
.replace("a", "[aàâä]");
Pattern pattern = Pattern.compile(regexPattern);
Matcher matcher = pattern.matcher(noms.get(c));
while(matcher.find()){
okMatch = true;
etages[a-1] = noms.get(c+1);
/*
String test = "";
for(int e=0; e<etages.length; e++){
test += etages[e]+"\\";
}
*/
a--;
//System.out.println(test);
}
}
if(!okMatch)
break outerloop;
}
if(a == etages.length-1 && theDir.exists())
trouve = true;
}
}
if(trouve){
ouvrirDossier(chemin);
}
else{
int selectedOption = JOptionPane.showConfirmDialog(null,
"Le dossier que vous tentez d'ouvrir ("+path+")ne semble pas exister, voulez vous le créer ?",
"SPB - Le dossier n'existe pas",
JOptionPane.YES_NO_OPTION);
if (selectedOption == JOptionPane.YES_OPTION){
if(args[0].equals("T")){
new File(path).mkdirs();
new File(path+"/Support/Doc").mkdirs();
new File(path+"/Support/Dev").mkdirs();
// ------------->
new File(path).mkdirs();
new File(path+"/Courriel").mkdirs();
new File(path+"/Courriel/Entrant").mkdirs();
new File(path+"/Courriel/Sortant").mkdirs();
new File(path+"/Document de Base").mkdirs();
new File(path+"/Document Intermediaire").mkdirs();
new File(path+"/Donnee").mkdirs();
new File(path+"/Donnee/Dsr").mkdirs();
new File(path+"/Donnee/Dsi").mkdirs();
new File(path+"/Livrable").mkdirs();
new File(path+"/Programme").mkdirs();
}
else if(args[0].equals("P")){
new File(path).mkdirs();
new File(path+"/Support/Doc").mkdirs();
new File(path+"/Support/Dev").mkdirs();
}
ouvrirDossier(path);
}
}
}
}
private static boolean ouvrirDossier(String chemin){
File theDir = new File(chemin);
//System.out.println(chemin);
if(theDir.exists()){
// SI OUI ON L'OUVRE
try{
Runtime runTime = Runtime.getRuntime();
Process process = runTime.exec("explorer "+chemin);
}
catch (IOException e){
e.printStackTrace();
}
return true;
}
return false;
}
public static void ouvrirAlerte(String texte){
JFrame frame = new JFrame("SPB");
frame.setPreferredSize(new Dimension(1270, 100));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel label1 = new JLabel(texte);
frame.add(label1);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public int nbLettre(char lettre, String mot){
int resultat = 0;
for(int a=0; a<mot.length(); a++){
if(mot.substring(a, a+1).equals(lettre)){
resultat++;
}
}
return resultat;
}
}
包ouvrirDossier;
导入java.awt.Dimension;
导入java.io.File;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JOptionPane;
公共类乌夫里多西耶酒店{
私有静态字符串路径;
专用静态最终作业窗格选项窗格=新建作业窗格(
“关闭此对话框的唯一方法是\n”
+“按下列按钮之一。\n”
+“你明白吗?”,
JOptionPane.QUESTION\u消息,
JOptionPane.YES\u NO\u选项);
公共静态void main(字符串[]args){
//在工厂的档案库上。
path=“A:\\”;
如果(参数长度>0){
int cpt;
对于(cpt=1;cpt,以及所有帮助我的人:-D使用a和强度过滤a:
import java.io.IOException;
导入java.nio.file.DirectoryStream;
感应电动机