EMMA Coverage Report (generated Fri Feb 14 08:28:31 UTC 2014)
[all classes][org.qedeq.base.utility]

COVERAGE SUMMARY FOR SOURCE FILE [Splitter.java]

nameclass, %method, %block, %line, %
Splitter.java100% (1/1)67%  (4/6)93%  (137/147)91%  (29/32)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class Splitter100% (1/1)67%  (4/6)93%  (137/147)91%  (29/32)
next (): Object 0%   (0/1)0%   (0/3)0%   (0/1)
remove (): void 0%   (0/1)0%   (0/5)0%   (0/1)
nextToken (): String 100% (1/1)92%  (24/26)90%  (9/10)
Splitter (String): void 100% (1/1)100% (8/8)100% (4/4)
hasNext (): boolean 100% (1/1)100% (10/10)100% (1/1)
iterate (): void 100% (1/1)100% (95/95)100% (15/15)

1/* This file is part of the project "Hilbert II" - http://www.qedeq.org
2 *
3 * Copyright 2000-2014,  Michael Meyling <mime@qedeq.org>.
4 *
5 * "Hilbert II" is free software; you can redistribute
6 * it and/or modify it under the terms of the GNU General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 */
15 
16package org.qedeq.base.utility;
17 
18import java.util.Iterator;
19 
20 
21/**
22 * Split given string into parts delimited by white space.
23 *
24 * @author  Michael Meyling
25 */
26public final class Splitter implements Iterator {
27 
28    /** Text to split. */
29    private final String text;
30 
31    /** Last found position. */
32    private int found;
33 
34    /** Start searching from here. */
35    private int start;
36 
37    /** Current found separator string. Consists of (perhaps several) delimiters. */
38    private String separator;
39 
40    /** Current found token. */
41    private String token;
42 
43    /**
44     * Constructor.
45     *
46     * @param   text        Text to split.
47     */
48    public Splitter(final String text) {
49        this.text = text;
50        iterate();
51    }
52 
53    /**
54     * Split String by given delimiter.
55     * "a b c" is converted to "a", " ", "b", " ", "c".
56     * "a b c " is converted to "a", " ", "b", " ", "c", " ".
57     * "a  b  c" is converted to "a", "  ", "b", "  ", "c".
58     *
59     * @return  Split text.
60     */
61    public Object next() {
62        return nextToken();
63    }
64 
65    /**
66     * Qualified next method.
67     *
68     * @return  Get next token.
69     */
70    public String nextToken() {
71        if (token != null) {
72            final String result = token;
73            token = null;
74            return result;
75        }
76        if (separator != null) {
77            final String result = separator;
78            separator = null;
79            iterate();
80            return result;
81        }
82        return null;
83    }
84 
85    /**
86     * Iterate token and whitespace.
87     */
88    private void iterate() {
89        found = start;
90        while (found < text.length() && !Character.isWhitespace(text.charAt(found))) {
91            found++;
92        }
93        if (found < text.length()) {
94            token = text.substring(start, found);
95            start = found;
96            while (found < text.length() && Character.isWhitespace(text.charAt(found))) {
97                found++;
98            }
99            separator = text.substring(start, found);
100            start = found;
101        } else {
102            separator = null;
103            token = text.substring(start);
104        }
105        if (token.length() == 0) {
106            token = null;
107        }
108    }
109 
110    public boolean hasNext() {
111        return token != null  || separator != null;
112    }
113 
114 
115    public void remove() {
116        throw new UnsupportedOperationException("this iterator doesn't support this method");
117    }
118 
119}

[all classes][org.qedeq.base.utility]
EMMA 2.1.5320 (stable) (C) Vladimir Roubtsov