In Java, we use StringTokenizer to split a string into multiple tokens.

Note

The StringTokenizer is a legacy class, try the split method of String, read this How to split a string in Java.

1. StringTokenizer examples

1.1 By default, the StringTokenizer uses default delimiters: space, tab, newline, carriage-return, and form-feed characters to split a String into tokens.

StringTokenizer.java

  public StringTokenizer(String str) {
      this(str, " \t\n\r\f", false);
  }

Read the below example.

  StringTokenizer st = new StringTokenizer("1, 2, 3, 4, 5");
  while (st.hasMoreTokens()) {
      System.out.println(st.nextToken());
  }

Output

1
2
3
4
5

1.2 The second argument of StringTokenizer constructor defined the custom delimiter to split a String. The below example split a String by a comma.

  StringTokenizer st = new StringTokenizer("1, 2, 3, 4, 5", ",");
  while (st.hasMoreTokens()) {
    System.out.println(st.nextToken().trim());
  }

Output

1
2
3
4
5

1.3 The third argument of StringTokenizer constructor tells if we want to include the delimiter as tokens, the default is false.

  StringTokenizer st = new StringTokenizer("1, 2, 3, 4, 5", ",", true);
  while (st.hasMoreTokens()) {
      System.out.println(st.nextToken().trim());
  }

Output

1
,
2
,
3
,
4
,
5

2. Split a String by a comma

Below is a complete StringTokenizer example of splitting a String by a comma delimiter.

StringTokenizerExample.java

package com.favtuts.string.split;

import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class StringTokenizerExample {

    public static void main(String[] args) {
        
        String line = "This is a String, split by, StringTokenizer example.";
        List<String> result = split(line, ",");
        for (String s : result) {
            System.out.println(s.trim());
        }
        
    }
    
    public static List<String> split(String line, String delimiter) {
        List<String> result = new ArrayList<>();
        StringTokenizer st = new StringTokenizer(line, delimiter);
        while (st.hasMoreTokens()) {
            result.add(st.nextToken());
        }
        return result;
    }
}

Output


This is a String
split by
StringTokenizer example.

3. Read a file and split a String

This example reads a CSV file line by line and uses StringTokenizer to split the line with a | delimiter.

c:\test\sample.csv

1| 20.29| python
2| 4.345| java
3| 9.99	| nodejs
4| 10.7 | react

StringTokenizerExample.java

package com.favtuts.string.split;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class StringTokenizerExample {

    public static void main(String[] args) throws IOException {

        StringTokenizerExample obj = new StringTokenizerExample();
        //List<Trend> trends = obj.readFromResource("sample.csv", "|");
        List<Trend> trends = obj.readFile(Paths.get("/home/tvt/workspace/favtuts/sample.csv"), "|");
        trends.forEach(System.out::println);
    }

    // get a file from resources folder
    // works in everywhere, IDEA, unit test and JAR file.
    public InputStream getFileFromResourceAsStream(String fileName) {

        // for static access
        //ClassLoader classLoader1 = FileResourcesUtils.class.getClassLoader();

        // The class loader that loaded the class
        ClassLoader classLoader = getClass().getClassLoader();
        InputStream inputStream = classLoader.getResourceAsStream(fileName);

        // the stream holding the file content
        if (inputStream == null) {
            throw new IllegalArgumentException("file not found! " + fileName);
        } else {
            return inputStream;
        }

    }

    public List<Trend> readFile(Path path, String delimiter) throws IOException {
        List<Trend> result = new ArrayList<>();
        try (BufferedReader br = new BufferedReader(new FileReader(path.toString()))) {

            String line;
            while((line = br.readLine()) != null) {
                Trend td = parseStringLine(line, delimiter);
                if (td != null)
                    result.add(td);
            }
        }

        return result;
    }

    public List<Trend> readFromResource(String fileName, String delimiter) throws IOException {

        List<Trend> result = new ArrayList<>();
        InputStream is = getFileFromResourceAsStream(fileName);
        try (InputStreamReader streamReader = new InputStreamReader(is, StandardCharsets.UTF_8);
             BufferedReader reader = new BufferedReader(streamReader)) {

            String line;
            while ((line = reader.readLine()) != null) {
                Trend td = parseStringLine(line, delimiter);
                if (td != null)
                    result.add(td);
            }

        }

        return result;
    }

    private Trend parseStringLine(String line, String delimiter) {
        StringTokenizer st = new StringTokenizer(line, delimiter);
        Trend result = null;
        while(st.hasMoreTokens()) {
            Integer id = Integer.parseInt(st.nextToken().trim());
            Double index = Double.parseDouble(st.nextToken().trim());
            String desc = st.nextToken().trim();
            result = new Trend(id, index, desc);
        }
        return result;
    }

    class Trend {
        private int id;
        private Double index;
        private String desc;

        public Trend(int id, Double index, String desc) {
            this.id = id;
            this.index = index;
            this.desc = desc;
        }

        @Override
        public String toString() {
            return "Trend{" +
                    "id=" + id +
                    ", index=" + index +
                    ", desc='" + desc + '\'' +
                    '}'; 
        }
    }
}

Output

Trend{id=1, index=20.29, desc='python'}
Trend{id=2, index=4.345, desc='java'}
Trend{id=3, index=9.99, desc='nodejs'}
Trend{id=4, index=10.7, desc='react'}

Download Source Code

$ git clone https://github.com/favtuts/java-core-tutorials-examples

$ cd java-string

References

Leave a Reply

Your email address will not be published. Required fields are marked *