Java中的字符串标记生成器

我有一个文本文件,其中包含由’|’分隔的数据。 我需要得到每个字段(用’|’分隔)并处理它。 文本文件如下所示:

ABC | DEF || FGHT

我正在使用字符串标记器(JDK 1.4)来获取每个字段值。 现在问题是,我应该在DEF之后得到一个空字符串。但是,我没有得到DEF和FGHT之间的空白区域。

我的结果应该是 – ABC,DEF,“”,FGHT,但我得到ABC,DEF,FGHT

来自StringTokenizer文档:

StringTokenizer是一个遗留类,出于兼容性原因而保留,尽管在新代码中不鼓励使用它。 建议任何寻求此function的人都使用String的split方法或java.util.regex包。

以下代码应该工作:

 String s = "ABC|DEF||FGHT"; String[] r = s.split("\\|"); 

使用returnDelims标志并检查后续出现的两个分隔符:

 String str = "ABC|DEF||FGHT"; String delim = "|"; StringTokenizer tok = new StringTokenizer(str, delim, true); boolean expectDelim = false; while (tok.hasMoreTokens()) { String token = tok.nextToken(); if (delim.equals(token)) { if (expectDelim) { expectDelim = false; continue; } else { // unexpected delim means empty token token = null; } } System.out.println(token); expectDelim = true; } 

这打印

 ABC DEF null FGHT 

API并不漂亮,因此被认为是遗留的(即“几乎过时”)。 仅在模式匹配过于昂贵的情况下使用它(对于极长的字符串应该是这种情况)或API期望枚举的情况。

如果您切换到String.split(String) ,请确保引用分隔符。 手动( "\\|" )或自动使用string.split(Pattern.quote(delim));

StringTokenizer忽略空元素。 考虑使用String.split,它也可以在1.4中使用。

来自javadocs:

StringTokenizer是一个遗留类,出于兼容性原因而保留,尽管在新代码中不鼓励使用它。 建议任何寻求此function的人都使用String的split方法或java.util.regex包。

你可以使用带有额外’returnDelims’布尔值的构造函数,并将true传递给它。 通过这种方式,您将收到分隔符,这将允许您检测此情况。

或者你可以实现你自己的字符串标记器来完成你需要的东西,它并不难。

这是解决此问题的另一种方法

  String str = "ABC|DEF||FGHT"; StringTokenizer s = new StringTokenizer(str,"|",true); String currentToken="",previousToken=""; while(s.hasMoreTokens()) { //Get the current token from the tokenize strings currentToken = s.nextToken(); //Check for the empty token in between || if(currentToken.equals("|") && previousToken.equals("|")) { //We denote the empty token so we print null on the screen System.out.println("null"); } else { //We only print the tokens except delimiters if(!currentToken.equals("|")) System.out.println(currentToken); } previousToken = currentToken; } 

package com.java.String;

import java.util.StringTokenizer;

public class StringWordReverse {

 public static void main(String[] kam) { String s; String sReversed = ""; System.out.println("Enter a string to reverse"); s = "THIS IS ASHIK SKLAB"; StringTokenizer st = new StringTokenizer(s); while (st.hasMoreTokens()) { sReversed = st.nextToken() + " " + sReversed; } System.out.println("Original string is : " + s); System.out.println("Reversed string is : " + sReversed); } 

}

输出:

输入要反转的字符串

原始字符串是:这是ASHIK SKLAB

反向字符串是:SKLAB ASHIK就是这个

这很简单……

  import java.util.StringTokenizer; class stringtoken{ public static void main (String args[]){ String s1 = "StringTokenizer|by|Himal"; StringTokenizer stt = new StringTokenizer(s1,"|"); while (stt.hasMoreTokens()){ String token = stt.nextToken(); System.out.println(token); } } } 

结果:

  StringTokenizer by Himal 

这是一种将字符串拆分为标记的方法(标记是一个或多个字母)

 public static void main(String[] args) { Scanner scan = new Scanner(System.in); String s = scan.nextLine(); s = s.replaceAll("[^A-Za-z]", " "); StringTokenizer arr = new StringTokenizer(s, " "); int n = arr.countTokens(); System.out.println(n); while(arr.hasMoreTokens()){ System.out.println(arr.nextToken()); } scan.close(); } 
 import java.util.StringTokenizer; public class Solution { public static void main(String[] args) { String s="He is a very very good boy, isn't he?"; StringTokenizer st = new StringTokenizer(s, ("[_\\@!?.', ]")); while (st.hasMoreTokens()) { System.out.println(st.nextToken()); } } }