Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.docx4j.model.fields;
  
  
Extract a number from a string. The number can have a decimal point.

Author(s):
jharrop
 
 public class NumberExtractor {
 	
 	static String regex = "([\\+-]?(\\.\\d+))|" +  // optional +/-, then decimal place, then digits
 			"([\\+-]?[0](\\.\\d+))|" +             // optional +/-, then 0, then decimal place, then digits
 			"([\\+-]?(\\d+)(\\.\\d*)?)";   // optional +/-, then digit, then optional (decimal place, then zero or more digits)
 
 
 	static Pattern pattern = Pattern.compile();
 	
 	static {
 		
 		 = Docx4jProperties.getProperty("docx4j.Fields.Numbers.DecimalSymbol"".");
 		 = Docx4jProperties.getProperty("docx4j.Fields.Numbers.GroupingSeparator"",");
 	}
 	
 	private String decimalSymbol;
 	
 	public NumberExtractor(String decimalSymbol) {
 		
 		if (decimalSymbol==null) {
 		} else {
 			this. = decimalSymbol;
 		}
 		
 	}

Convert radix point to ".", and remove thousands separator, in preparation for our regex.
 
 	private String prepare(String string) {
 		
 		string = string.replaceAll("");
 		
 		if (.equals(".")) {
 			// do nothing
 			return string;
 		} else {
 			return string.replace(".");
 		}
 		
 	}

Parameters:
string
Returns:
Throws:
java.lang.IllegalStateException if no match
 
 	public String extractNumber(String stringthrows java.lang.IllegalStateException {
 
 		try {
 			Matcher makeMatch = .matcher(
 					prepare(string));
 			if (makeMatch.find() ) {
 				
 				String matchingSubstring = makeMatch.group();
 				
 				// Check that there is no 
 //				int pos = string.indexOf(matchingSubstring) + matchingSubstring.length()-1;
 //				int pos2 = string.indexOf(' ', pos);
 //				
 //				if (pos2>pos
 //						|| (pos2<0 && (string.length() - pos > 0) )) {
 //					// there are alpha chars on the end of the number
 //					throw new java.lang.IllegalStateException("Not a number");
 //				} 
 				return matchingSubstring;
 			} else {
 				throw new java.lang.IllegalStateExceptionstring + " does not contain a number");				
 			}
 			
 		} catch (java.lang.IllegalStateException noMatch) {
 			// This is what Word does
 			return string;
 		}
 	}
 

Parameters:
args
	public static void main(String[] args) {
		NumberExtractor nex = new NumberExtractor(".");
		..println(nex.extractNumber("€ HEH EUR"));
	}
New to GrepCode? Check out our FAQ X