import junit.framework.Assert;
import org.junit.Test;
public class SearchArray {
public static void main(String[] args) {
System.out.println( new SearchArray().findArray(new int[] {1,2,3,4,5,1,2,3,4,5}, new int[]{2,3,4}) );
}
/**
* This method returns a -1 if no match is found else returns the index where
* the sub array exists.
* @param array1
* @param array2
* @return
*/
private int findArray(int[] array1, int[] array2){
int startIndex = -1;
if(array1 !=null && array2 != null ){
for (int i = 0; i < array1.length; i++){
if(startIndex != -1){
break;
}
if( array2[0] == array1[i] ){
startIndex = i; //we have found a starting point
for (int j = 0; j < array2.length; j++){
if( array2[j] != array1[startIndex + j]){
startIndex = -1;
break;
}
}
}
}
}else{
throw new IllegalArgumentException("The arrays should not be null");
}
return startIndex;
}
@Test
public void testNotFound() {
Assert.assertEquals( -1, new SearchArray().findArray(new int[] {1,2,3,4,5,6,7,8,9,0}, new int[]{5,9,7}) );
}
@Test
public void testFoundFirst() {
Assert.assertEquals( 1, new SearchArray().findArray(new int[] {1,2,3,4,5,1,2,3,4,5}, new int[]{2,3,4}) );
}
@Test
public void testFound() {
Assert.assertEquals( 4, new SearchArray().findArray(new int[] {1,2,3,4,5,6,7,8,9,0}, new int[]{5,6,7}) );
}
@Test
public void testException() {
try{
new SearchArray().findArray( null, null) ;
}catch(Exception e){
Assert.assertTrue(e instanceof IllegalArgumentException);
}
}
}
javasimplified
Thursday, September 23, 2010
java property loading and template substitution
public class PropertyLoader {
private Properties properties;
public PropertyLoader() {
properties = loadProperties("input.properties");
substitutePropertiesWithinProperties( properties );
}
public static void main(String[] args) throws IOException {
PropertyLoader loader = new PropertyLoader();
String htmlFile = loader.loadHtmlFileAsString("template.html");
System.out.println("The substituted HTML is : " + loader.substituteTemplateValues( htmlFile) );
}
private String substituteTemplateValues(String htmlFile ) {
Pattern pattern = Pattern.compile( "\\$\\{\\w+}" );
Matcher matcher = pattern.matcher( htmlFile );
while( matcher.find( ) ){//Look for a place holder in prop value.
String placeHolder = htmlFile.substring( matcher.start(), matcher.end());
String placeHolderKey = placeHolder.substring( 2, placeHolder.length() - 1 );
String placeHolderValue = (String)properties.get( placeHolderKey );
if (placeHolderValue == null){
throw new IllegalArgumentException("Property " + placeHolder + " cannot be substituted.");
}
htmlFile = htmlFile.replaceFirst( "\\$\\{\\w+}" , placeHolderValue);
matcher = pattern.matcher( htmlFile ); //Update the matcher for the next iteration
}
return htmlFile;
}
private String loadHtmlFileAsString(String filePath) throws java.io.IOException{
StringBuffer fileData = new StringBuffer(1000);
ClassLoader loader = Thread.currentThread ().getContextClassLoader ();
BufferedReader reader = new BufferedReader( new InputStreamReader(loader.getResourceAsStream(filePath) ) );
char[] buf = new char[1024];
int numRead=0;
while((numRead=reader.read(buf)) != -1){
fileData.append(buf, 0, numRead);
}
reader.close();
return fileData.toString();
}
private void substitutePropertiesWithinProperties( Properties properties) {
Pattern pattern = Pattern.compile( "\\$\\{\\w+}" );
for(Object key : properties.keySet()){
String val = (String) properties.get(key);
Matcher matcher = pattern.matcher(val);
while( matcher.find( ) ){//Look for a place holder in prop value.
String placeHolder = val.substring( matcher.start(), matcher.end());
String placeHolderKey = placeHolder.substring( 2, placeHolder.length() - 1 );
String placeHolderValue = (String) properties.get( placeHolderKey );
if (placeHolderValue == null){
throw new IllegalArgumentException("Property strToReplace cannot be substituted.");
}
val = val.replaceFirst( "\\$\\{\\w+}" , placeHolderValue);
properties.put(key, val); //Update the properties set
matcher = pattern.matcher(val); //Update the matcher for the next iteration
}
}
}
public Properties loadProperties (String name){
ClassLoader loader = Thread.currentThread ().getContextClassLoader ();
Properties result = null;
InputStream in = null;
try{
in = loader.getResourceAsStream (name); // Returns null on lookup failures:
if (in != null){
result = new Properties ();
result.load (in); // Can throw IOException
}
}
catch (Exception e){
result = null;
}
finally{
if (in != null) try { in.close (); } catch (Throwable ignore) {}
}
return result;
}
}
private Properties properties;
public PropertyLoader() {
properties = loadProperties("input.properties");
substitutePropertiesWithinProperties( properties );
}
public static void main(String[] args) throws IOException {
PropertyLoader loader = new PropertyLoader();
String htmlFile = loader.loadHtmlFileAsString("template.html");
System.out.println("The substituted HTML is : " + loader.substituteTemplateValues( htmlFile) );
}
private String substituteTemplateValues(String htmlFile ) {
Pattern pattern = Pattern.compile( "\\$\\{\\w+}" );
Matcher matcher = pattern.matcher( htmlFile );
while( matcher.find( ) ){//Look for a place holder in prop value.
String placeHolder = htmlFile.substring( matcher.start(), matcher.end());
String placeHolderKey = placeHolder.substring( 2, placeHolder.length() - 1 );
String placeHolderValue = (String)properties.get( placeHolderKey );
if (placeHolderValue == null){
throw new IllegalArgumentException("Property " + placeHolder + " cannot be substituted.");
}
htmlFile = htmlFile.replaceFirst( "\\$\\{\\w+}" , placeHolderValue);
matcher = pattern.matcher( htmlFile ); //Update the matcher for the next iteration
}
return htmlFile;
}
private String loadHtmlFileAsString(String filePath) throws java.io.IOException{
StringBuffer fileData = new StringBuffer(1000);
ClassLoader loader = Thread.currentThread ().getContextClassLoader ();
BufferedReader reader = new BufferedReader( new InputStreamReader(loader.getResourceAsStream(filePath) ) );
char[] buf = new char[1024];
int numRead=0;
while((numRead=reader.read(buf)) != -1){
fileData.append(buf, 0, numRead);
}
reader.close();
return fileData.toString();
}
private void substitutePropertiesWithinProperties( Properties properties) {
Pattern pattern = Pattern.compile( "\\$\\{\\w+}" );
for(Object key : properties.keySet()){
String val = (String) properties.get(key);
Matcher matcher = pattern.matcher(val);
while( matcher.find( ) ){//Look for a place holder in prop value.
String placeHolder = val.substring( matcher.start(), matcher.end());
String placeHolderKey = placeHolder.substring( 2, placeHolder.length() - 1 );
String placeHolderValue = (String) properties.get( placeHolderKey );
if (placeHolderValue == null){
throw new IllegalArgumentException("Property strToReplace cannot be substituted.");
}
val = val.replaceFirst( "\\$\\{\\w+}" , placeHolderValue);
properties.put(key, val); //Update the properties set
matcher = pattern.matcher(val); //Update the matcher for the next iteration
}
}
}
public Properties loadProperties (String name){
ClassLoader loader = Thread.currentThread ().getContextClassLoader ();
Properties result = null;
InputStream in = null;
try{
in = loader.getResourceAsStream (name); // Returns null on lookup failures:
if (in != null){
result = new Properties ();
result.load (in); // Can throw IOException
}
}
catch (Exception e){
result = null;
}
finally{
if (in != null) try { in.close (); } catch (Throwable ignore) {}
}
return result;
}
}
Subscribe to:
Posts (Atom)