我有一个文本和一个数组列表。我想检查我的文本是否在ArrayList中包含任何元素,如果他确实找到了,请用"%"
替换两个单词之间的空格。
这是我的代码:
public static boolean stringContainsItemFromList(String text, ArrayList<String> list)
{
for (String i: list)
{
if (text.contains(list[i]))
{
text.replaceAll(" ", "%");
System.out.println("done");
return true;
}
}
return false;
}
它给了我这个错误:string cannot be converted to int
行if (text.contains(list[i]))
。你知道我还能怎么做吗?
答案 0 :(得分:1)
i
是一个字符串。在那种情况下,list[i]
没有意义,因为i
内的list[i]
应该是一个索引,它是一个整数(例如list[0]
,list[1]
,但不能为list["hello"]
)。
因此,如果您要检查文本是否包含列表中的字符串,则可以使用
if(text.contains(i))
另外,请注意,您的
结果text.replaceAll(" ", "%");
被忽略。如果要保留更改后的文本,可以通过将替换结果存储到一个新的单独变量中来实现。
答案 1 :(得分:0)
ArrayList<String> list
不是数组,而是一个列表。因此,您可以通过调用get()
方法来获取列表的元素。
例如
list.get(0) // returns the first element of the list
也
for (String i: list) {
// ...
}
是一个foreach循环,是
的另一个版本for(int x=0; x<list.size(); x++) {
// ...
}
i
对应于list.get(x)
您应将text.contains(list[i])
更改为text.contains(i)
,因为i
代表list.get(x)
问:如何检查文本是否包含ArrayList元素
修复错误后,您将看到变量text
尚未更改。因为在Java中字符串是不可变的,并且replaceAll()
方法返回一个新字符串。因此,您应该将新值分配给text
变量:
text = text.replaceAll("\\s", "%");
这是stringContainsItemFromList()
方法的更正版本:
public static boolean stringContainsItemFromList(String text, List<String> list)
{
for (String i: list) {
if(text.contains(i)) {
text = text.replaceAll("\\s", "%");
System.out.println("done");
System.out.println(text);
return true;
}
}
return false;
}
答案 2 :(得分:0)
您的错误是因为i
是一个字符串,并且您将其用作整数
public static boolean stringContainsItemFromList(String text, ArrayList<String> list)
{
for (String i: list) // HERE: i is an element of the list, not the index!
{
if(text.contains(list[i])) // HERE: list[string] -> error!
{
text.replaceAll(" ", "%");
System.out.println("done");
return true;
}
}
return false;
}
将text.contains(list[i])
替换为text.contains(i)
,并尝试使用更具描述性的var名称:)
答案 3 :(得分:0)
让我相信的是,您实际上需要这个!
public static boolean stringContainsItemFromList(String text, ArrayList<String> list)
{
boolean flag = false;
for (String i: list) {
if(text.contains(i)) {
text = text.replaceAll(i, "%");
flag = true;
}
}
System.out.println(text);
System.out.println("done");
return flag;
}
答案 4 :(得分:0)
请考虑以下代码行:
for (String i : list) {
if (text.contains(list[i])) {
在这里,您要迭代list
,并在每次迭代中将list
的当前字符串存储到i
中。由于i
已经包含您要在text
中签入的字符串,因此您要做的就是
if (text.contains(i))
您面临的问题有两个原因:
A。您正在尝试使用数组语法从list
访问字符串,而list
不是数组。如果您打算使用其索引从list
访问字符串,则可以
for(int i = 0; i<list.size(); i++) {
if (text.contains(list.get(i))) {
//...
}
}
B。假设list
是一个数组,您的语法仍然会出错,因为数组的索引值必须为int
,而i
不是int;这是一个字符串。
如果您没有适当地命名变量,则这类问题很常见,例如如果您使用了str
或下面给出的其他一些合适的名称,您将不会遇到这种问题:
for (String str : list) {
if (text.contains(str)) {