X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/html/StringDivider.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/html/StringDivider.java new file mode 100644 index 0000000..8439fbc --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/wizards/html/StringDivider.java @@ -0,0 +1,75 @@ +/* + * $Id: StringDivider.java,v 1.2 2006-10-21 23:18:43 pombredanne Exp $ + * Copyright Narushima Hironori. All rights reserved. + */ +package net.sourceforge.phpeclipse.wizards.html; + +import java.util.Arrays; +import java.util.regex.Pattern; + +public class StringDivider { + + static Pattern tagNameChoosePattern = Pattern + .compile("<[\\s/]*(\\w+)\\s*.*>"); + + String[] splitRegexpCandidates = { "\t", ",", "\\s", "\\s+", }; + + public StringDivider() { + } + + public String[][] divide(String content) { + return divide(content, getDivideSuitedRegexp(content)); + } + + public String[][] divide(String content, String regexp) { + String[] lines = content.split("\n"); + int len = lines.length; + String[][] dist = new String[len][]; + + int max = Integer.MIN_VALUE; + for (int i = 0; i < len; i++) { + String line = lines[i]; + String[] cells = line.split(regexp); + dist[i] = cells; + if (max < cells.length) { + max = cells.length; + } + } + for (int i = 0; i < len; i++) { + String[] newArray = new String[max]; + Arrays.fill(newArray, ""); + System.arraycopy(dist[i], 0, newArray, 0, dist[i].length); + dist[i] = newArray; + } + return dist; + } + + public String getDivideSuitedRegexp(String content) { + String[] lines = content.split("\n"); + + String resultRegexp = null; + int score = Integer.MAX_VALUE, cellCount = Integer.MIN_VALUE; + + for (int i = 0; i < splitRegexpCandidates.length; i++) { + String regexp = splitRegexpCandidates[i]; + int max = Integer.MIN_VALUE, min = Integer.MAX_VALUE; + for (int j = 0; j < lines.length; j++) { + String[] vals = lines[j].split(regexp); + if (max < vals.length) { + max = vals.length; + } + if (min > vals.length) { + min = vals.length; + } + } + int s = max - min; + if (score > s || (score == s && max > cellCount)) { + cellCount = max; + score = s; + resultRegexp = regexp; + } + } + return resultRegexp; + } + +}