Convert a string to proper case
From CodeCodex
This code provides a method that turns improper casing (LIKE THIS or like this) to title casing (Like This).
Contents |
[edit] Implementations
[edit] Haskell
import Data.Char (toUpper, toLower) proper :: String -> String proper = unwords . map capitalize . words where capitalize (x:xs) = toUpper x : map toLower xs
For example:
> proper "foO BAr" "Foo Bar"
[edit] Java
[edit] Method
public String makeProper(String theString) throws java.io.IOException{
java.io.StringReader in = new java.io.StringReader(theString.toLowerCase());
boolean precededBySpace = true;
StringBuffer properCase = new StringBuffer();
while(true) {
int i = in.read();
if (i == -1) break;
char c = (char)i;
if (c == ' ' || c == '"' || c == '(' || c == '.' || c == '/' || c == '\\' || c == ',') {
properCase.append(c);
precededBySpace = true;
} else {
if (precededBySpace) {
properCase.append(Character.toUpperCase(c));
} else {
properCase.append(c);
}
precededBySpace = false;
}
}
return properCase.toString();
}
[edit] Test class
public static void main(String[] args) {
StringUtils util = new StringUtils();
try {
System.out.println(util.makeProper("testing tESTig TeStInG123 "+
"1jf94osl TEST TEST test test. doe, john. DOE, JOHN"));
} catch (java.io.IOException e) {
System.out.println("Exception:" + e);
}
}
Original Source: Java Forum
[edit] Method 2(Java 6 + RegEx)
public static String toProperCase(String input) {
//A pattern for all (UNICODE-) lower case characters preceded by a word boundary
Pattern p = Pattern.compile("\\b([\\p{javaLowerCase}])",Pattern.UNICODE_CASE);
Matcher m = p.matcher(input);
StringBuffer sb = new StringBuffer(input.length());
while (m.find()) {
m.appendReplacement(sb, m.group(1).toUpperCase());
}
m.appendTail(sb);
return sb.toString();
}
[edit] JUnit Test for Method 2
public void testProperCase() {
String test = StringUtil.toProperCase("es regnet-so.schön^im_walde");
assertEquals("Es Regnet-So.Schön^Im_walde", test);
}
[edit] Objective-C
NSString *a = @"foO BAr"; NSString *b = [a capitalizedString];
//This may be regarded more of a Cocoa solution than a strict Objective-C solution.
[edit] OCaml
# #load "str.cma";;
# let proper string =
let words = Str.split (Str.regexp " ") (String.lowercase string) in
String.concat " " (List.map String.capitalize words);;
val proper : string -> string = <fun>
For example:
# proper "hello world";; - : string = "Hello World"
[edit] Perl
print ucfirst lc for split /\b/;
[edit] PHP
$a = 'foO BAr'; $b = ucwords(strtolower($a));
[edit] Python
a = 'hello world! how are you?'
b = ' '.join(i.capitalize() for i in a.split(' '))
Alternatively:
import string b = string.capwords(a, ' ')
Another method:
b = a.title()
These two methods differ on how they determine word boundary. For example, title() considers apostrophes to separate words, while capwords() does not:
>>> string.capwords("they're bill's friends from the UK")
"They're Bill's Friends From The Uk"
>>> "they're bill's friends from the UK".title()
"They'Re Bill'S Friends From The Uk"
[edit] Ruby
a = 'foO BAr'
b = a.split.collect {|i| i.capitalize}.join(' ')
[edit] Tcl
proc to_proper_case s {return [string toupper [string index $s 0]][string tolower [string range $s 1 end]]}
test:
puts [to_proper_case "FoO BAr"] ;# -> Foo bar
also, builtin command "string totitle"
puts [string totitle "FoO BAr"] ;# -> Foo bar

