当前位置: 首页 > 知识库问答 >
问题:

对字符串进行标记时出现问题

冯德宇
2023-03-14

我从字符串标记器开始,它给我正确的结果,直到我收到上面的字符串作为输入。

此字符串的特殊之处在于,它在几个管道之间没有任何字符,例如231257Vikaspatil

当我试图用标记器拆分它时,它给我的标记比我预期的要少,它只是忽略了空字符,结果是我给phoneNumber分配了1257值,给RegionCode分配了InsertDaate值。

import java.util.StringTokenizer;

public class TestSpitingOfString {
    public static void main(String args[]) throws Exception {
        //DTO  dataType|recordID|employeeid|deptID|phoneNumber|regionCode|InsertDate|StartDate|hobby|designation|age|firstName|middleName|lastName
        String str = "SampleData|1111|9130|23||1257|2014-04-01 18:00:00|2014-04-12 09:00:00||Software Developer|20|Vikas||PATIL";

        System.out.println("Original String -> "+str);

        StringTokenizer tokenizer= new StringTokenizer(str,"|");// skips empty values between tokens
        System.out.println("Words With StringTokenizer ");
        while(tokenizer.hasMoreElements()){
            System.out.print(tokenizer.nextToken()+",");
        }
        System.out.println();

        String distributedWithPipe[] =str.split("|");// disaster :(  it splitted every character
        System.out.println("Words With String.split() distributedWithPipe character ->");
        for(String split : distributedWithPipe){
            System.out.print(split+",");
        }

        System.out.println();
        String distributedWithEscapedPipe[] =str.split("\\|"); // This worked for me
        System.out.println("Words With String.split() distributedWithEscapedPipe ->");
        for(String split : distributedWithEscapedPipe){
            System.out.print(split+",");
        }

    }
}
Original String -> SampleData|1111|9130|23||1257|2014-04-01 18:00:00|2014-04-12 09:00:00||Software Developer|20|Vikas||PATIL

Words With StringTokenizer

SampleData,1111,9130,23,1257,2014-04-01 18:00:00,2014-04-12 09:00:00,Software Developer,20,Vikas,PATIL,

Words With String.split() distributedWithPipe character ->

,S,a,m,p,l,e,D,a,t,a,|,1,1,1,1,|,9,1,3,0,|,2,3,|,|,1,2,5,7,|,2,0,1,4,-,0,4,-,0,1, ,1,8,:,0,0,:,0,0,|,2,0,1,4,-,0,4,-,1,2, ,0,9,:,0,0,:,0,0,|,|,S,o,f,t,w,a,r,e, ,D,e,v,e,l,o,p,e,r,|,2,0,|,V,i,k,a,s,|,|,P,A,T,I,L,

Words With String.split() distributedWithEscapedPipe ->

SampleData,1111,9130,23,,1257,2014-04-01 18:00:00,2014-04-12 09:00:00,,Software Developer,20,Vikas,,PATIL,
    null

共有1个答案

陈高寒
2023-03-14

StringTokenizer在其javadoc中声明了这种行为(尽管我承认它可能更清楚,但这取决于如何解释“连续字符”):

StringTokenizer的实例有两种行为方式之一,这取决于它是使用值为true还是false的returnDelims标志创建的:

>

  • 如果标志为false,则分隔符用于分隔标记。标记是不是分隔符的连续字符的最大序列。

  •  类似资料:
    • 我正在尝试用Java编写RSA加密和解密类,用于客户端来回传递字符串的服务器。我为这些类编写了以下代码: 我有以下测试类代码: 然而,当我尝试运行测试类时,密钥生成和加密工作正常,但当我尝试解密时,会出现一个错误。错误是javax。加密。IllegalBlockSizeException:数据不能超过128字节,但我的数据肯定小于128字节。 我可以确认将公钥转换为字符串并返回相同的公钥。我也尝试

    • 问题内容: 我正在尝试从EditText字段中将两个数字加在一起。到目前为止,我有下面的代码,我相信它会将EditText字段“ pos1_deg”和“ pos2_deg”转换为整数deg1和deg2。 然后,我可以执行以下操作将它们添加在一起 然后degSum寄存器保存deg1和2的和。 然后要输出回“结果” EditText,我需要将整数degSum更改为字符串。我认为正确的方法是使用以下代码

    • 我使用StringTokenizer将字符串分成标记,但是每当出现在中间而没有任何时,就跳过它并取下一个标记 实际产出 想要的Outupt

    • 问题内容: 我对使用MONEY数据类型的JDBC应用程序有疑问。当我插入MONEY栏时: 我有例外: 在使用ODBC驱动程序的本机Windows应用程序中,也可以使用相同的SQL。我住在波兰,居住在波兰,在我的国家/地区用逗号分隔数字的小数部分,因此我尝试: 而且有效。我检查了在PreparedStatement中必须使用点分隔符:。当然,我可以使用: 但是有些代码是“通用”代码,它从csv文件导

    • 我正试图读取一个带有XML的字符串,并面临一个意外的令牌问题。 我在JMeter中使用一个JSR223采样器,并试图通过使用

    • 我们在一个应用程序中使用ffmpeg对视频进行切片。虽然它对PAL视频的切片效果很好,但它对QT视频却不起作用...下面是我们使用的命令: ffmpeg.exe-i“input.mp4”ss startTime-c copy-to stopTime-y“output.mp4” 抛出错误-“[mp4@0515C240]在流#1中找不到编解码器pcm_s16le的标记,容器中当前不支持编解码器” 输入