Tag Archives: Java

parallel counting in Java using AtomicInteger

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.TimeUnit;

class ParallelCounterExample {
   public static void main(String[] args) throws InterruptedException {
      int threads = 2000;
      ExecutorService executor = Executors.newFixedThreadPool(threads);
      final AtomicInteger atomi = new AtomicInteger();
      for(int i=0; i<threads; i++) {
         executor.execute( new Runnable() {
            @Override
            public void run() {
               atomi.getAndIncrement();
            }
         });
      }
      executor.awaitTermination(1, TimeUnit.SECONDS);
      executor.shutdown();
      System.out.println(atomi.get());
    }
}

Regex with negatives lookahead and lookbehind

"Looking different directions" by Paul Kline at (https://www.flickr.com/photos/paulelijah/6717953239/)
“Looking different directions” by Paul Kline.

Problem: Match strings that contains a single quotation mark ('), but not multiple ones together.

Solution:

(?<!')'(?!')

This is a regex for a single quotation mark with a (?<!') in the left and a (?!’) in the right. The (?<!') is a ?< look behind if not ! a single quotation mark '. The (?!') is a look ahead ? if not ! a single quotation mark '.

Java code:

import java.util.regex.Pattern;

public class RegexProblem {
  public static void main(String args[]) {
    Pattern single_quote = Pattern.compile("(?<!')'(?!')");
    String[] phrases = {
      "",
      "'",
      "a'a",
      "aaa",
      "aa'aa",
      "aa''aa",
      "aa'''aaa",
      "aaa''''aaa"
    };
    for(String phrase: phrases){
      System.out.println(String.format("For %s is %s.", phrase,
            single_quote.matcher(phrase).find()));
    }
  }
}

The output is:

For  is false.
For ' is true.
For a'a is true.
For aaa is false.
For aa'aa is true.
For aa''aa is false.
For aa'''aaa is false.
For aaa''''aaa is false.

Java, printing arrays

As I keep forgetting, this post is to remind me that Java Java doesn’t have a pretty toString() for arrays objects, and it does for Lists.

import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;

public class ListsExample {
    public static void main (String args[]) {
        // as an array
        String[] list1 = {"a","b","c"};
        System.out.println(Arrays.toString(list1));
        
        // as an List provided by Arrays
        List<String> list2 = Arrays.asList("d", "e", "f");
        System.out.println(list2);

        // as an implementation of the interface List
        // ArrayList (could also be LinkedList, Vector, etc)
        List<String> list3 = new ArrayList<String>();
        list3.add("g");
        list3.add("h");
        list3.add("i");
        System.out.println(list3);
    }
}

The output is:

[a, b, c]
[d, e, f]
[g, h, i]

Android screen height and width

Context ctx = getContext();
Display display = ((WindowManager)ctx.getSystemService(ctx.WINDOW_SERVICE)).getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();

Yes, there are easier ways to retrieve the screen width on Android but there are cases that this long code is the only solution. You may already have the Context. WindowManager or the Display and so it would be smaller, but this code is more general.

Java: invoking a method by name


import java.lang.reflect.*;
 
public class Foo {
	public void bar(int param){
		System.out.println(param);
	}	
 
	public static void main(String args[]){
		Object f = new Foo();
		try {
			Method m = f.getClass().getMethod("bar", int.class);
			m.invoke(f, 42);
		} catch (Exception e){
			System.err.println(e);	
		}
	}
 
}

$ java Foo
42

calling commands in Java

I don’t like the approach of calling native shell commands in any language instead of using multi platform libraries, but here is a little prof of concept Java program to call native commands.

import java.io.*;
import java.util.*;
public class Exec {
   public static void main(String args[]) throws IOException {
      Process proc = Runtime.getRuntime().e xec(args);
      BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()));
      String line;
      while ((line = br.readLine()) != null) {
         System.out.println(line);
      }
   }
}

Usage:

java Exec VALID_COMMAND

Example:

$ java Exec echo hello
hello

ps: I had to write “e xec” instead of exec because it was triggering some very strange security protection in the blog engine here. If you need to compile this code change that. =P Also there’s no error handling, you should pass a valid command when executing this code.