java - 当我对字符串使用 split 方法时,为什么在我的字符串数组列表中添加了一个额外的空间
问题描述
我附上了我的代码和代码的输出。当我打印数组元素时,它没有显示任何空格,但是当这些元素被传输到 arrayList 时,我在每个元素之前得到这些空格,就好像它们在那里一样,因为实际字符串中的“/”
这是我的代码
public static void main(String[] args) {
Scanner x = new Scanner(System.in);
String n= "/www/abc/pqr/./com";
String arr[] = n.split("/");
ArrayList<String> list = new ArrayList<>();
for(int i=0;i<arr.length;i++)
{
if(arr[i]!=".")
{
list.add(arr[i]);
}
}
System.out.println(list);
}
输出是这样的:[, www, abc, pqr, ., com]
我还使用了 equals() 方法来比较字符串,但也没有运气。
这是我更新的代码
public class LTI {
public static void main(String[] args) {
Scanner x = new Scanner(System.in);
String n = "/www/abc/../pqr/./com";
String arr[] = n.split("/");
ArrayList<String> list = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
if (!arr[i].isEmpty()) {
if (!arr[i].equals(".")) {
if (arr[i].equals("..")) {
list.remove(i);
} else {
list.add(arr[i]);
}
}
}
}
}
}
但它显示索引 3 超出了长度 2 的范围
解决方案
所以我假设你的问题是针对你在输出中得到的这些空格:
[, www, abc, pqr, ., com]
^ ^ ^ ^ ^
您看到的这些“空格”实际上并不是String
列表中 s 的一部分,它们是在您隐式调用via时添加toString()
的。ArrayList
System.out.println(list)
见AbstractCollection#toString()
:
返回此集合的字符串表示形式。字符串表示由集合元素的列表组成,按其迭代器返回的顺序排列,用方括号 ("[]") 括起来。相邻元素由字符“、”(逗号和空格)分隔。通过 String.valueOf(Object) 将元素转换为字符串。
因此,列表中的实际String
s 不包含这些空格,它们只是为了在打印时查看方便而添加的。
这是您更新的代码,它还解决了通过而不是String
正确比较 s的问题。我还包括一个检查以从列表中删除空s:equals
!=
isEmpty()
String
public static void main(String[] args) {
String n = "/www/abc/pqr/./com";
String arr[] = n.split("/");
ArrayList<String> list = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
if (!(arr[i].equals(".") || arr[i].isEmpty())) {
list.add(arr[i]);
}
}
System.out.println(list);
}
输出:
[www, abc, pqr, com]
推荐阅读
- regex - Gitlab CI 变量作为正则表达式
- linux - 根据条件替换值并使用 AWK 比较来自多个文件的值
- c++ - 将 QIcon 添加到 QTableView 单元格
- flutter - 为什么在 Dart 中执行方法级联时出现此错误?
- python - 使饼图上的百分比更具可读性
- java - XPath如何获取具有多个过滤器(包括子节点)的父节点的计数
- c# - C# 中不可为空的只读引用和空的私有默认构造函数导致警告 CS8618
- git - 仅合并从分支到主分支的一些更改
- jquery - Visual Studio Code giving error for all my jquery code after the update
- konvajs - 你能用画布填充形状吗