Java 如何从一个没有重音的单词中提取所有强调的单词?

Java 如何从一个没有重音的单词中提取所有强调的单词?,java,Java,我正在尝试创建一个java程序,允许我打开路径在参数中的文件。 当我的路径像:“C:\telephone1\”并且文件夹的名称是“telephone1”时,一切都正常工作。 但是如果文件夹名为“téléphone1”(重音),我不想在脚本中找到它。 这是对程序说:您必须测试: -电话线 -télephonne -泰利丰 -泰利丰 -tèlephonne -泰勒丰 -tèlèphonnè -泰勒丰 -… 然后脚本将找到它。 ?使用java.text.Normalizer删除重音符号: s = N

我正在尝试创建一个java程序,允许我打开路径在参数中的文件。
当我的路径像:“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;
感应电动机