我试图将一个字符串分成29个令牌..... stringtokenizer不会返回null令牌.我试过string.split,但我相信我做错了什么:
String [] strings = line.split(",", 29);
Run Code Online (Sandbox Code Playgroud)
样本输入:
10150,15:58,23:58,16:00,00:00,15:55,23:55,15:58,00:01,16:03,23:58,,,,,16:00,23:22,15:54,00:03,15:59,23:56,16:05,23:59,15:55,00:01,,,,
10155,,,,,,,,,,,07:30,13:27,07:25,13:45,,,,,,,,,,,07:13,14:37,08:01,15:23
10160,10:00,16:02,09:55,16:03,10:06,15:58,09:48,16:07,09:55,16:00,,,,,09:49,15:38,10:02,16:04,10:00,16:00,09:58,16:01,09:57,15:58,,,,
Run Code Online (Sandbox Code Playgroud) 如何在Objective-C中拆分字符串?我正在开发一个包含日期选择器的简短应用程序.我显示日期从日期选择器获取它并通过标签显示它.
我的主要问题是如何将日期分成三个单独的字符串?谁有想法呢?
谢谢
给出一个像这样的字符串:
Hello {FIRST_NAME}, this is a personalized message for you.
Run Code Online (Sandbox Code Playgroud)
FIRST_NAME是一个任意标记(传递给方法的地图中的一个键),编写一个例程,将该字符串转换为:
Hello Jim, this is a personalized message for you.
Run Code Online (Sandbox Code Playgroud)
给出了一张带有FIRST_NAME条目的地图 - > Jim.
似乎StringTokenizer是最直接的方法,但Javadocs真的说你应该更喜欢使用正则表达式aproach.你会如何在基于正则表达式的解决方案中做到这一点?
我有一个看起来像 - 56,0,76,0,93,,,,,,,1230 的字符串。我使用 StringTokenizer 将其拆分为“,”。然而,这似乎是从 93 直接跳到 1230。有没有办法让它在移动到 1230 之前返回六个空字符串?
我有一个看似简单的问题,即将逗号分隔String为标记,在以下情况下输出应包含空标记:
String逗号中的第一个字符是逗号.String是逗号.例如,对于String:",abd,def,,ghi,"应该产生输出:{"", "abd", "def", "", "ghi", ""}.
我已经尝试使用String.split,Scanner并且StringTokenizer对于这一点,但每个给出不同的不希望的输出(下文实施例).有人可以建议一个优雅的解决方案,最好使用JDK类吗?显然我可以自己编写代码,但我觉得我错过了上述三种方法之一.请注意,分隔符是固定的,String但不一定是逗号,也不是单个字符.
示例代码
import java.util.*;
public class Main12 {
public static void main(String[] args) {
String s = ",abd,def,,ghi,";
String[] tokens = s.split(",");
System.err.println("--- String.split Output ---");
System.err.println(String.format("%s -> %s", s, Arrays.asList(tokens)));
for (int i=0; i<tokens.length; ++i) {
System.err.println(String.format("tokens[%d] = %s", i, tokens[i]));
}
System.err.println("--- Scanner Output ---");
Scanner sc …Run Code Online (Sandbox Code Playgroud) 如果你有这个代码:
"......".Split(new String[]{"...", ".."}, StringSplitOptions.None);
Run Code Online (Sandbox Code Playgroud)
生成的数组元素是:
1. ""
2. ""
3. ""
Run Code Online (Sandbox Code Playgroud)
现在,如果你颠倒了分隔符的顺序,
"......".Split(new String[]{"..", "..."}, StringSplitOptions.None);
Run Code Online (Sandbox Code Playgroud)
生成的数组元素是:
1. ""
2. ""
3. ""
4. ""
Run Code Online (Sandbox Code Playgroud)
从这两个例子中,我倾向于得出结论,当从左到右遍历数组的每个元素时,Split方法递归地标记化.
但是,一旦我们将包含字母数字字符的分隔符放入等式中,很明显上述理论是错误的.
"5.x.7".Split(new String[]{".x", "x."}, StringSplitOptions.None)
Run Code Online (Sandbox Code Playgroud)
结果是: 1. "5" 2. ".7"
"5.x.7".Split(new String[]{"x.", ".x"}, StringSplitOptions.None)
Run Code Online (Sandbox Code Playgroud)
结果是: 1. "5" 2. ".7"
这次我们获得相同的输出,这意味着基于第一组示例理论化的规则不再适用.(即:如果始终根据数组中分隔符的位置确定分隔符优先级,那么在最后一个示例中,我们将获得"5."&"7"而不是"5"&".7".
至于为什么我浪费时间去猜测.NET标准API是如何工作的,这是因为我想为我的java应用程序实现类似的功能,但是StringTokenizer和org.apache.commons.lang.StringUtils都没有提供拆分的能力.使用多个多字符分隔符的字符串(即使我要找到提供此功能的API,也很难知道它是否始终使用String.Split方法使用的相同算法进行标记.
我有一个42行的文本文件.每行包含超过22,000个以逗号分隔的数字.
我想从每一行中提取某些数字,并且我有一个长度为1000的int数组,其中包含从这42行中的每一行中需要的1,000个数字.
例如,如果数组包含43,1,3244,则意味着我需要从第一行到第42行开始的第43个数字,第1个数字和第3244个数字.
我的for循环似乎不起作用,它只读取文本文件中第一行有42行220000个数字,我不知道它出错了.
for(int i=0;i<42;i++){ //irretates through the 42 lines of
counter=1; // to keep track about on which line the code is working
System.out.println("Starting line"+i);
st2=new StringTokenizer(raf1.readLine(),",");
//raf3 is a RandomAccessFile object containing the 42 lines
a:while(st2.hasMoreTokens()){
b=is_there(array2,counter);
// is_there is a method that compares the rank of the taken being read with
//the whole array that has the 1000 numbers that i want.
if(b==false){
// if the rank or order of token [e.g. 1st, 432th] we are …Run Code Online (Sandbox Code Playgroud) 我正在尝试将CSV文件导入到可以在Java程序中使用的数组中.CSV文件已成功导入自身,输出显示在终端上,但它会引发错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at CompareCSV.main(CompareCSV.java:19)
Run Code Online (Sandbox Code Playgroud)
在末尾.另外,当我尝试调用数组中的元素时,它也会显示相同的错误.我的代码如下:
import java.io.*;
import java.util.*;
public class CompareCSV {
public static void main(String[] args) {
String fileName = "sampledata1.csv";
try {
BufferedReader br = new BufferedReader( new FileReader(fileName));
String strLine = null;
StringTokenizer st = null;
int lineNumber = 0, tokenNumber = 0;
while((fileName = br.readLine()) != null) {
lineNumber++;
String[] result = fileName.split(",");
for (int x=0; x<result.length; x++) {
System.out.println(result[x]);
}
}
}
catch (FileNotFoundException e) {
e.printStackTrace();
} catch …Run Code Online (Sandbox Code Playgroud) 例如:
String s ="这是a.line是.over"
应该出来
"这是a.Line is.Over"
我想过两次使用字符串标记器
-first split using"."
-second split using " " to get the first word
-then change charAt[0].toUpper
Run Code Online (Sandbox Code Playgroud)
现在我不确定如何使用字符串标记符的输出作为另一个的输入?
我也可以使用split方法生成我尝试过的数组
String a="this is.a good boy";
String [] dot=a.split("\\.");
while(i<dot.length)
{
String [] sp=dot[i].split(" ");
sp[0].charAt(0).toUpperCase();// what to do with this part?
Run Code Online (Sandbox Code Playgroud) 为了这个问题,让我们假设我有一个String包含值Two;.Three;.Four(等等),但元素是分开的;..
现在我知道有多种方法可以分割字符串,例如split()和StringTokenizer(更快的一个并且运行良好),但我的输入文件大约是1GB,我正在寻找比它更有效的东西StringTokenizer.
经过一些研究,我发现indexOf并且substring非常有效,但这些示例只有单个分隔符,或者结果只返回一个单词/元素.
示例代码使用indexOf和substring:
String s = "quick,brown,fox,jumps,over,the,lazy,dog";
int from = s.indexOf(',');
int to = s.indexOf(',', from+1);
String brown = s.substring(from+1, to);
Run Code Online (Sandbox Code Playgroud)
上面的工作用于打印,brown但我如何使用indexOf和substring分割具有多个分隔符的行并显示如下所有项目.
预期产出
Two
Three
Four
....and so on
Run Code Online (Sandbox Code Playgroud) stringtokenizer ×10
java ×8
string ×5
string-split ×2
c# ×1
csv ×1
for-loop ×1
ios ×1
iphone ×1
nsstring ×1
objective-c ×1
parsing ×1
regex ×1
split ×1
tokenize ×1