capitalize words

  • Thread starter Thread starter Aaron
  • Start date Start date
A

Aaron

string a = "i have an apple";
i want the output to be "I Have An Apple";


i was able to capitalize the first word but can't figure out how to
capitalize every word in that string

Thanks,
Aaron
 
You could do a foreach through the string -- foreach (char c in a) -- or do
a for loop and use the string's indexer. Either way you can examine each
character that way and apply Char.ToUpper() to any character following
whitespace (Char.IsWhiteSpace()). You can't modify individual characters of
the string of course without creating a new string, which isn't efficient;
you might want to append each character to a StringBuilder and return the
StringBuilder's ToString() at the end of the routine. Or, it might be
faster to convert the string to a character array, tweak the necessary
characters, and then convert it back to a string at the end. Your mileage
will likely vary depending on typical string lengths.

Yet another approach might be to use the Split() method of string to turn it
into a string array of words, proper case each word, then put them back
together into a string. That is conceptually simple but may be too slow if
you're going to call this routine alot.

Finally, a regular expression could be constructed to do some or all of this
work.

--Bob
 
If you're using VB.Net, check out the StrConv() function and its Conversion
argument. VbStrConv.ProperCase, according to the docs, capitalizes each word
of a string.

I'm not aware of a C# equivalent.

Tom Dacon
Dacon Software Consulting
 
string a = "i have an apple";
i want the output to be "I Have An Apple";


i was able to capitalize the first word but can't figure out how
to capitalize every word in that string

Aaron,

As Tom Dacon pointed out, VB.Net has the StrConv function. What
isn't generally known is that all of those functions that appear to
be only callable from VB.Net can be called from any .Net language,
including C#:


// Add a reference to the Microsoft.VisualBasic.dll to your project.

// For .Net 1.0, it is located in
// C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705

// For .Net 1.1, it is located in
// C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322


using System.Globalization;
using Microsoft.VisualBasic;

....

string a = "i have an apple";
Console.WriteLine(Strings.StrConv(a, VbStrConv.ProperCase,
CultureInfo.CurrentCulture.LCID));
 
string a = "i have an apple";
i want the output to be "I Have An Apple";


i was able to capitalize the first word but can't figure out how to
capitalize every word in that string

Since strings are immutable (for a good reason), you can't say something
like:

a[idx] = Char.ToUpper(a[idx]);

Since this would modify the instance, the assignment can't be made.

You could, on the other hand, assign the variable a to a whole new string
instance (reference):

a = "new string";

However, you aren't actually changing the instance that a referenced before
-- you're simple "pointing" a to a new string instance.

The usual way to work around the immutability problem would be to create a
StringBuilder instance, modify it as desired then return a string from it:

StringBuilder sb = new StringBuilder(a);
sb[idx] = Char.ToUpper(sb[idx]);
a = sb.ToString();

Since StringBuilder instances aren't immutable, you *can* modify them, as
shown.

In this case, though, I would probably just create a StringBuilder instance
and fill it up one character at a time:

/// <summary>
/// Return a copy of the specified string with the first character and
/// any characters following spaces, as upper-case.
/// </summary>
static string MakeIntoTitleCase(string val) {
StringBuilder sb = new StringBuilder();

for (int i = 0; i < val.Length; ++i){
if (i == 0 || val[i - 1] == ' ') {
sb.Append(Char.ToUpper(val));
} else {
sb.Append(val);
}
}

return sb.ToString();
}
 
string a = "i have an apple";
i want the output to be "I Have An Apple";


i was able to capitalize the first word but can't figure out how to
capitalize every word in that string

Thanks,
Aaron

using System;
using System.Globalization;

class Test
{
public static void Main ()
{
string s =
CultureInfo.CurrentCulture.TextInfo.ToTitleCase ("i have an apple.");
Console.WriteLine (s);
}
}
 
Is it possible to traverse the whole string, and when encountering a
space, set the next character to uppercase. With this method ,it must
be made sure that only once space exist between two words.

Maybe there is an easier way how to do it, then someone else will
post, and both of us will learn :)
 
Aaron,

When you use VBNet or import in the other languages the
Microsoft.VisualBasic namespace, you can use both these

Console.WriteLine(Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleC
ase("i have an apple."))
Console.WriteLine(StrConv("i have an apple.", VbStrConv.ProperCase))

(with C# closed by ;)

I hope this helps?

Cor
 
Back
Top