package com.android.dvci.util;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;
import com.android.dvci.auto.Cfg;
public class StringUtils {
private static final String TAG = "StringUtils";
/**
* Byte array to hex string.
*
* @param b
* the b
* @return the string
*/
public static String byteArrayToHexString(final byte[] b) {
final StringBuffer sb = new StringBuffer(b.length * 2);
for (final byte element : b) {
final int v = element & 0xff;
if (v < 16) {
sb.append('0');
}
sb.append(Integer.toHexString(v));
}
return sb.toString().toUpperCase();
}
/**
* Hex string to byte array.
*
* @param s
* the s
* @return the byte[]
*/
public static byte[] hexStringToByteArray(final String s, int offset, int len) {
final byte[] b = new byte[len / 2];
for (int i = 0; i < b.length; i++) {
final int index = offset + i * 2;
final int v = Integer.parseInt(s.substring(index, index + 2), 16);
b[i] = (byte) v;
}
return b;
}
public static byte[] hexStringToByteArray(final String string) {
return hexStringToByteArray(string, 0, string.length());
}
/**
* Hex string to byte array2.
*
* @param config
* the config
* @return the byte[]
*/
public static byte[] hexStringToByteArray2(final String config) {
final int offset = 4;
final int len = config.length() / 2;
final byte[] ret = new byte[len + 4];
for (int i = offset; i < ret.length; i++) {
final char first = config.charAt((i - offset) * 2);
final char second = config.charAt((i - offset) * 2 + 1);
int value = Integer.parseInt(new String(new byte[] { (byte) first }), 16) << 4;
value += second;
ret[i] = (byte) Integer.parseInt(new String(new byte[] { (byte) second }), 16);
}
final DataBuffer databuffer = new DataBuffer(ret, 0, 4);
databuffer.writeInt(len);
return ret;
}
public static byte[] hexStringToByteArray2(final String wchar, int offset, int len) {
final byte[] ret = new byte[len / 2];
for (int i = 0; i < ret.length; i++) {
final char first = wchar.charAt(offset + (i * 2));
final char second = wchar.charAt(offset + (i * 2 + 1));
// int value = NumberUtilities.hexDigitToInt(first) << 4;
// value += NumberUtilities.hexDigitToInt(second);
int value = Integer.parseInt(new String(new byte[] { (byte) first }), 16) << 4;
value += second;
// #ifdef DBC
if (Cfg.DEBUG) {
Check.asserts(value >= 0 && value < 256, "HexStringToByteArray: wrong value"); //$NON-NLS-1$
// #endif
}
ret[i] = (byte) value;
}
return ret;
}
public static boolean matchStar(String wildcardProcess, String processName) {
if (processName == null) {
return (wildcardProcess == null);
}
for (;;) {
if (wildcardProcess.length() == 0) {
return (processName.length() == 0);
}
if (wildcardProcess.charAt(0) == '*') {
wildcardProcess = wildcardProcess.substring(1);
if (wildcardProcess.length() == 0) {
return true;
}
if (wildcardProcess.charAt(0) != '?' && wildcardProcess.charAt(0) != '*') {
final int len = processName.length();
for (int i = 0; i < len; i++) {
final char c = processName.charAt(0);
processName = processName.substring(1);
final String tp = wildcardProcess.substring(1);
if (c == wildcardProcess.charAt(0) && matchStar(tp, processName)) {
return true;
}
}
return false;
}
for (int i = 0; i < processName.length(); i++) {
processName = processName.substring(1);
if (matchStar(wildcardProcess, processName)) {
return true;
}
}
return false;
}
if (processName.length() == 0) {
return false;
}
if (wildcardProcess.charAt(0) != '?' && wildcardProcess.charAt(0) != processName.charAt(0)) {
return false;
}
processName = processName.substring(1);
wildcardProcess = wildcardProcess.substring(1);
}
// NOTREACHED
}
public static String inputStreamToString(InputStream is) throws IOException {
if (is != null) {
Writer writer = new StringWriter();
char[] buffer = new char[1024];
try {
Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
int n;
while ((n = reader.read(buffer)) != -1) {
writer.write(buffer, 0, n);
}
} finally {
is.close();
}
return writer.toString();
} else {
return "";
}
}
/**
* Chomp.
*
* @param sd
* the sd
* @param c
* the c
* @return the string
*/
public static String chomp(final String sd, final String c) {
if (sd == null) {
return null;
}
if (sd.length() == 0) {
return ""; //$NON-NLS-1$
}
if (sd.endsWith(c)) {
return sd.substring(0, sd.length() - c.length());
}
return sd;
}
/**
* Unspace.
*
* @param string
* the string
* @return the string
*/
public static String unspace(final String string) {
if (Cfg.DEBUG) {
Check.requires(string != null, "Unspace: null string"); //$NON-NLS-1$
}
if (string == null) {
return null;
}
final StringBuffer unspace = new StringBuffer();
int spaces = 0;
final int len = string.length();
for (int i = 0; i < len; i++) {
final char c = string.charAt(i);
if (c != ' ') {
unspace.append(c);
} else {
spaces++;
}
}
if (Cfg.DEBUG) {
Check.ensures(unspace.length() + spaces == string.length(), "Unspace: wrong spaces"); //$NON-NLS-1$
}
return unspace.toString();
}
public static boolean isEmpty(String string) {
return string == null || string.length() == 0;
}
public static String join(List<String> lines, String delimiter, int start) {
String listString = "";
int counter = 0;
for (String s : lines) {
if (counter++ < start)
continue;
listString += s + delimiter;
}
return listString;
}
public static String join(List<String> lines) {
return join(lines, "", 0);
}
public static String join(String[] lines, String delimiter, int start) {
String listString = "";
int counter = 0;
for (String s : lines) {
if (counter++ < start)
continue;
listString += s + delimiter;
}
return listString;
}
public static String join(String[] lines){
return join(lines, "", 0);
}
public static String readFile(String filename) {
String ret = "";
File file = new File(filename);
try {
FileInputStream is = new FileInputStream(file);
ret = inputStreamToString(is);
} catch (FileNotFoundException e) {
if (Cfg.DEBUG) {
Check.log(TAG + " (readFile) Error: " + e);
}
} catch (IOException e) {
if (Cfg.DEBUG) {
Check.log(TAG + " (readFile) Error: " + e);
}
}
return ret;
}
public static List<String> readFileLines(String filename) {
String line = "";
List<String> lines = new ArrayList<String>();
File file = new File(filename);
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(file));
do {
line = reader.readLine();
if(line!=null){
lines.add(line);
}else{
break;
}
} while (true);
} catch (FileNotFoundException e) {
if (Cfg.DEBUG) {
Check.log(TAG + " (readFile) Error: " + e);
}
} catch (IOException e) {
if (Cfg.DEBUG) {
Check.log(TAG + " (readFile) Error: " + e);
}
}finally{
if (reader != null){
try {
reader.close();
} catch (IOException e) {
}
}
}
return lines;
}
public static String[] split(String e) {
return e.split(",");
}
}