Function to capitalize first letter in each word in string but forces all other letters to be lowercase
55 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Olivia
am 23 Nov. 2013
Bearbeitet: Image Analyst
am 24 Aug. 2024
Does anyone know how to create a function which accepts a string and capitalizes the first letter in each word of the string, but also forces the other letters to be lowercase?
Any advice would be greatly appreciated!!
This is my attempt so far:
str=['this is a TEST'];
for i=1:length(str);
if str(1,i(1));
str= upper(str);
else str(1,i);
str= lower(str);
end
end
5 Kommentare
Akzeptierte Antwort
Azzi Abdelmalek
am 23 Nov. 2013
Bearbeitet: Azzi Abdelmalek
am 23 Nov. 2013
str='this is a tEST';
str=lower(str)
idx=regexp([' ' str],'(?<=\s+)\S','start')-1
str(idx)=upper(str(idx))
4 Kommentare
Image Analyst
am 16 Jun. 2022
@Nayeb Hasin Just try it:
str='99this is a TEST';
strout=uplow(str)
function strout=uplow(str)
str=lower(str)
idx=regexp([' ' str],'(?<=\s+)\S','start')-1
str(idx)=upper(str(idx))
end
I guess that error is not what you expected or wanted.
Try changing strout on the function line to str.
Weitere Antworten (2)
Image Analyst
am 24 Nov. 2013
Bearbeitet: dpb
am 1 Jan. 2017
If you want something a lot more intuitive and a lot simpler than regexp, you can use allwords(). I use allwords all the time - it's a very useful utility.
s='this iS the iNpUt StrinG'
individualWords = allwords(s) % Get the words separated individually.
% Capitalize the first letters
new_s = '';
for k = 1 : length(individualWords)
% Get the kth word.
thisWord = individualWords{k}
% Capitalize the first letter. Lower the subsequent letters.
capWord = [upper(thisWord(1)), lower(thisWord(2:end))]
% Concatenate to the new string.
new_s = [new_s, ' ', capWord]
end
message = sprintf('This is the new string: %s', new_s);
uiwait(helpdlg(message));
You'll probably find this code a lot easier to understand than if you use regexp - I know I do. Not as compact though.
1 Kommentar
Image Analyst
am 6 Jan. 2019
Bearbeitet: Image Analyst
am 24 Aug. 2024
Now you can use strsplit() to split apart a sentence into individual words.
s='this iS the iNpUt StrinG'
individualWords = strsplit(s) % Get the words separated individually.
% Capitalize the first letters
new_s = '';
for k = 1 : length(individualWords)
% Get the kth word.
thisWord = individualWords{k};
% Capitalize the first letter. Lower the subsequent letters.
capWord = [upper(thisWord(1)), lower(thisWord(2:end))];
% Concatenate to the new string.
new_s = [new_s, ' ', capWord];
end
new_s = strtrim(new_s); % Get rid of leading space.
fprintf('Here is the new, output string:\n%s', new_s);
per isakson
am 23 Nov. 2013
Bearbeitet: per isakson
am 24 Nov. 2013
The help on regexprep (R2013a) includes this example
str = 'here are two sentences. neither is capitalized.';
expression = '(^|\.)\s*.';
replace = '${upper($0)}';
newStr = regexprep(str,expression,replace)
Try
str = ['this is a TEST'];
str = lower( str );
expression = '(^|\.)\s*.';
replace = '${upper($0)}';
newStr = regexprep(str,expression,replace)
However, every word should be capitalized. Change expression to include characters after space
expression = '(^|[\. ])\s*.';
7 Kommentare
goc3
am 24 Aug. 2024
Bearbeitet: goc3
am 24 Aug. 2024
@Stephen23: In my case, all the letters are already lowercase and are only from the set [a-zA-Z_0-9].
If I were writing a utility function, the more comprehensive solution you provided in the more-recent comment would be preferred.
Siehe auch
Kategorien
Mehr zu Characters and Strings finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!