Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将一个句子拆分成单词并与另一个字符串进行比较?_Java_Android_Arrays_String_Compare - Fatal编程技术网

Java 如何将一个句子拆分成单词并与另一个字符串进行比较?

Java 如何将一个句子拆分成单词并与另一个字符串进行比较?,java,android,arrays,string,compare,Java,Android,Arrays,String,Compare,我已将单位保存在.txt文件中。我在数组列表中得到这些。现在我想检查字符串中是否存在任何单位 清单包括: “单位”、“千克”、“千克”、“千克”、“重量”, “升”、“包”、“包”、“gms”、“克”、“半公斤” 比如,如果我有一个字符串-1kg大米,我想从这个字符串中得到数字,我想把这个句子分成单词,并想和单位数组列表中的每个项目进行比较。如果它存在,我想保存它。所以我想分别储存1公斤和大米。字符串可能包含我要修剪所有这些空格并检查比较的任何空格 获取数组列表中的文本文件 public

我已将单位保存在.txt文件中。我在数组列表中得到这些。现在我想检查字符串中是否存在任何单位

清单包括:

“单位”、“千克”、“千克”、“千克”、“重量”,
“升”、“包”、“包”、“gms”、“克”、“半公斤”

比如,如果我有一个字符串-1kg大米,我想从这个字符串中得到数字,我想把这个句子分成单词,并想和单位数组列表中的每个项目进行比较。如果它存在,我想保存它。所以我想分别储存1公斤和大米。字符串可能包含我要修剪所有这些空格并检查比较的任何空格

获取数组列表中的文本文件

    public class ReadTextFiles {

    public static List<String> readItemNamesFile(Context context) {
        String sText = null;
        List<String> stringList;
        try{

            InputStream is = context.getResources().openRawResource(R.raw.item_names);
            //Use one of the above as per your file existing folder

            int size = is.available();
            byte[] buffer = new byte[size];
            is.read(buffer);
            is.close();
            sText = new String(buffer, "UTF-8");

            String[] sTextArray = sText.replace("\"", "").split(",");
            stringList = new ArrayList<String>(Arrays.asList(sTextArray));
            System.out.print(stringList);
        } catch (IOException ex) {
            ex.printStackTrace();
            return null;
        }
        return stringList;

    }
}

 public void getUnits()
{
    List<String> units = new ArrayList<>();

    units = ReadTextFiles.readUnitsFile(getActivity());

    System.out.print(units.size());

}
公共类ReadTextFiles{
公共静态列表readItemNamesFile(上下文){
字符串sText=null;
列表列表;
试一试{
InputStream is=context.getResources().openRawResource(R.raw.item_名称);
//根据您现有的文件文件夹使用上述其中一项
int size=is.available();
字节[]缓冲区=新字节[大小];
is.read(缓冲区);
is.close();
sText=新字符串(缓冲区,“UTF-8”);
字符串[]sTextArray=sText.replace(“\”,”).split(“,”);
stringList=newarraylist(Arrays.asList(sTextArray));
系统输出打印(字符串列表);
}捕获(IOEX异常){
例如printStackTrace();
返回null;
}
返回字符串列表;
}
}
公共单位()
{
列表单位=新的ArrayList();
units=ReadTextFiles.readUnitsFile(getActivity());
System.out.print(units.size());
}

现在我想比较字符串,假设它是“1KG土豆”。然后应该从数组列表中找到土豆。它也应该不区分大小写。

我将使用算法方法来获得答案。下面是:

strItem = "1kg rice";
//Run a loop through the list of units and for each unit check this
if (strItem.contains(list.get(index)))
 //Do the needful and break

据我所知,这是您需求的完整解决方案:

    String measuring = "\"units\", \"kg\", \"kilogms\", \"kilo\", \"literes\", \"Liter\", \"packets\", \"packet\", \"gms\", \"grams\", \"half kg\"";
    String items = "\"Potato\", \"rice\", \"Eggs\", \"Maggi\", \"Dryfruits\", \"Maza\", \"cold drink\", \"sauce\", \"catchup\", \"coconut oil\"";
    String matching = "Kg500 Potato";//"Potato 1 kg";
    String item = "", measuringUnit = "", quantity = "";

    private void findOut() {
        String[] sMeasuringArray = measuring.replace("\"", "").split(", ");
        ArrayList<String> measuringList = new ArrayList<String>(Arrays.asList(sMeasuringArray));

        String[] sItemsArray = items.replace("\"", "").split(", ");
        ArrayList<String> itemsList = new ArrayList<String>(Arrays.asList(sItemsArray));

        String[] sMatchingArray = matching.split(" ");

        matching = matching.toUpperCase();

        for (int i = 0; i < measuringList.size(); i++) {
            if (matching.contains(measuringList.get(i).toUpperCase())) {
                measuringUnit = measuringList.get(i).trim();
                break;
            }
        }

        for (int i = 0; i < itemsList.size(); i++) {
            if (matching.contains(itemsList.get(i).toUpperCase())) {
                item = itemsList.get(i).trim();
                break;
            }
        }

        if (matching!= null) {
            String[] part = matching.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)");
            for (int k = 0; k < part.length; k++) {
                try {
                    Integer.parseInt(part[k]);
                    quantity = part[k];
                    break;
                } catch (Exception ex) {
                    continue;
                }
            }
        }

        /*if (sMatchingArray != null) {
            if (sMatchingArray.length == 3) {
                for (int j = 0; j < sMatchingArray.length; j++) {
                    if (measuringUnit.trim().equals(sMatchingArray[j].trim())) {
                        quantity = sMatchingArray[j - 1].trim();
                        break;
                    }
                }
            } else if (sMatchingArray.length == 2) {

                String[] part = matching.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)");
                for (int k = 0; k < part.length; k++) {
                    try {
                        Integer.parseInt(part[k]);
                        quantity = part[k];
                        break;
                    } catch (Exception ex) {
                        continue;
                    }
                }
            }
        }*/

        Log.e("Solution: ", "item = " + item + ", measuringUnit = " + measuringUnit + ", quantity = " + quantity);
    }
String measuring=“”单位“,”千克“,”千克“,”千克“,”文字“,”升“,”包“,”克“,”半千克“;
字符串项=“\'Potato\”、\'rice\”、\'egs\”、\'Maggi\”、\'dryfiults\、\'Maza\”、\'cold different\、\'sauce\”、\'catchup\、椰子油\;
字符串匹配=“Kg500土豆”/“土豆1公斤”;
字符串项=”,度量单位=”,数量=”;
私有void findOut(){
字符串[]sMeasuringArray=measuring.replace(“\”,”).split(“,”);
ArrayList measuringList=新的ArrayList(Arrays.asList(sMeasuringArray));
字符串[]sitemArray=items.replace(“\”,”).split(“,”);
ArrayList itemsList=新的ArrayList(Arrays.asList(SitemArray));
字符串[]sMatchingArray=matching.split(“”);
matching=matching.toUpperCase();
对于(int i=0;iString[]part=matching.split(“(?如果您可以控制数据,我建议您转移到更复杂的结构,如JSON或XML。对不起,您没有理解。@Romankolomenskiwhy JSON和XML被视为复杂结构@RomanKolomenskii?好吧,类似JSON的
{“quantity”:1,“measure”:“kg”,“name”:“potato”}
比某些使用空格格式化的字符串安全得多。我不会以json格式获取数据,只获取字符串格式的数据。@RomankolomenskiBut字符串索引可以是任何内容。例如“1kg大米”或“大米1 kg”。你的问题中没有提到。那么,要做到这一点,你不必拆分字符串。只需检查它的单位就可以了。假设我要检查项目名称,如rice的单位是否相同?你能给我举个例子吗?只需将其与具有项目名称的列表进行比较。如果字符串包含
背景
,是否应该找到
>kg
在里面?(
bac
+
kg
+
round
)@sid仅测量单位kg我没有得到数量和项目。您没有得到项目,因为在我的代码样本中匹配字符串是“1kg马铃薯”,小写字母,但在项目列表中类似于“马铃薯”.至于数量,让我检查一下。如果没有给空格,它就不起作用了。我对数量做了检查,只从字符串中提取了数字。现在,只要字符串是500gms rice,它就不会为项目名称搜索相同的gms。为什么要使用最后的if和elseif?我们只将单位和项目放入for循环中。最后,如果和if else用于相同的CA正如你提到的500克大米,让我查一查