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