我的问题很简单,是否可以使用split方法或类似的东西来分隔换行符和下一行的第一个元素? (使用JAVA)
例如,我将其作为一个字符串:
T | True | 25.05.2016 16:21:59
E | 1 | 2 | 3 | 3 | X |百灵
大号| 2 | 3
大号| 43 | JJJ
E | 2 | 33
H | 24343 | IADS
我想通过换行符和E |拆分它,结果应该是:
第一个字符串:
T | True | 25.05.2016 16:21:59
第二个字符串:
E | 1 | 2 | 3 | 3 | X |百灵
大号| 2 | 3
大号| 43 | JJJ
第三串:
E | 2 | 33
H | 24343 | IADS
有没有办法做到这一点? 谢谢!
答案 0 :(得分:0)
嗯,据我所知,没有可用的分割方法(在默认的API中)可以拆分并保留你说它要分割的字符(在这种情况下是\n
和{ {1}})。据我所知:你想保留E|
,但你想'转储'E|
。要解决此问题,您可以编写自己的方法来执行此操作。它可能是这样的:
\n
在main方法中,您可以创建字符串变量并为其指定字符串。 (public static void main(String[] args) {
String string = "T|True|25.05.2016 16:21:59\n" +
"E|1|2|3|3|X|J\n" +
"L|2|3\n" +
"L|43|JJJ\n" +
"E|2|33\n" +
"H|24343|IADS";
String[] stringArray = splitTheString(string, new String[] {"E|", "\n"});
for(String s : stringArray) {
System.out.println(s);
}
}
)。为了保持整洁,我决定制作一个单独的String string = "your string here"
方法。它需要两个参数:首先是你要分割的字符串,第二个是包含字符串的数组,你希望将字符串拆分。
对于方法,我将使用splitTheString()
。它以有序的方式自动存储数据,并且不存储重复数据。
我也将使用ArrayList。两者都可以导入以节省一些输入(TreeList
),但在本例中我没有这样做。
import java.util.*
好的,我会在某些方面(比如这里)拆分方法来解释发生了什么。首先,我创建了一个TreeSet对象。我将用它来存储找到的索引号。我们将尝试查找子字符串public static String[] splitTheString(String string, String[] regex) {
java.util.TreeSet<Integer> list = new java.util.TreeSet<>();
list.add(0);
list.add(string.length());
int fromIndex;
int toIndex;
和\n
所在位置的索引号。我添加了索引号0(因为我们需要一个起点;字符串是从0开始的,所以我们从0开始)。而且我还添加了字符串的大小(字符串的最后一个索引是大小-1)。
E|
SPLIT - &gt;在下一部分中,我使用了增强的for循环(或foreach循环)。对于数组“regex”中的每个String,我们将String存储在名为 for(String s : regex) {
toIndex = 0;
while(toIndex >= 0) {
fromIndex = toIndex + 1;
toIndex = string.indexOf(s, fromIndex);
if(toIndex >= 0) list.add(toIndex);
}
}
的变量中。因此,s
首先为s
,而E|
为\n
。
在for
- 循环中,我有一个while
- 循环,它将循环直到toIndex
小于零(因此为负)。为什么?我正在使用字符串indexOf
方法。它将返回我们正在搜索的String的索引(从您使用参数提供的索引开始)。如果找不到String,它将返回-1
。所有这些值都存储在列表中。 (还记得它们是按照正确的顺序排列的吗?)
java.util.ArrayList<String> stringList = new java.util.ArrayList<>();
int count = 0;
while(list.size() > 1) {
stringList.add(string.substring(list.pollFirst(), list.first()));
if(stringList.get(count).equals("\n")) stringList.remove(count);
else count++;
}
SPLIT - &gt;这是我们创建ArrayList
- 对象的地方。它将用于存储您的字符串。因此,我们将使用ArrayList中的add()
- 方法将我们的子字符串添加到stringList。要获取我们的子字符串,我们将使用字符串方法substring(fromIndex, toIndex)
。它将返回fromIndex到toIndex的子字符串。索引号将从列表中获取(这是一个TreeMap)。我们将使用pollFirst()
- 方法(将删除并返回第一个值)和first()
- 方法(将返回但不删除第一个值(并且因为您首先删除了第一个值,新的第一个值将是原始的第二个值...依此类推(仍在跟随?))。
我们还将检查子字符串是否不等于\n
..我们不希望将中断存储为单独的字符串值。
String[] stringArray = new String[count];
count = 0;
for(String s : stringList) {
stringArray[count] = s.replace("\n", "");
count++;
}
return stringArray;
}
所有子字符串都已添加到stringList-object中。现在我们要做的就是将它们添加到一个数组中(如果它是你想要使用的数组)。在将它们添加到数组之前,我们从字符串中删除任何“\ n”,因此您不必为自己没有添加的中断而烦恼。
希望您觉得这个答案很有帮助。如果有任何不清楚的地方或者您对如何改进此答案有任何建议,请发表评论。