using static System.Console;
public class Test {
public static void Main() {
const int MaxTamanhoEndereco = 30;
WriteLine(TrimPosition("AvenidaAventureirosAfortunados, 1234", MaxTamanhoEndereco));
WriteLine(TrimPosition("Rua Aventureiros Afortunados, 12345", MaxTamanhoEndereco));
WriteLine(TrimPosition("Av Aventureiros Afortunados, 12345", MaxTamanhoEndereco));
WriteLine(TrimPosition("R Aventureiros Afortunados, 12345", MaxTamanhoEndereco));
WriteLine(TrimPosition(" Aventureiros Afortunados, 12345", MaxTamanhoEndereco));
WriteLine(TrimPosition("Aventureiros Afortunados, 12345", MaxTamanhoEndereco));
WriteLine(TrimPosition("Aventureiros Afortunados, 1234", MaxTamanhoEndereco));
}
static string TrimPosition(string text, int limit, string specialChars = " ,.", string trimMarker = "...") {
if (text.Length > limit) {
var markerLength = trimMarker.Length;
var isSpecial = specialChars.Contains(text.Substring(limit - markerLength, 1));
text = text.Substring(0, limit - markerLength);
var posicaoUltimoEspaco = text.LastIndexOfAny(specialChars.ToCharArray());
text = ((posicaoUltimoEspaco > 0 && !isSpecial) ? text.Substring(0, posicaoUltimoEspaco) : text) + trimMarker;
}
return text;
}
}
//https://pt.stackoverflow.com/q/114959/101
dXNpbmcgc3RhdGljIFN5c3RlbS5Db25zb2xlOwoKcHVibGljIGNsYXNzIFRlc3QgewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKSB7CgkJY29uc3QgaW50IE1heFRhbWFuaG9FbmRlcmVjbyA9IDMwOwoJCVdyaXRlTGluZShUcmltUG9zaXRpb24oIkF2ZW5pZGFBdmVudHVyZWlyb3NBZm9ydHVuYWRvcywgMTIzNCIsIE1heFRhbWFuaG9FbmRlcmVjbykpOwoJCVdyaXRlTGluZShUcmltUG9zaXRpb24oIlJ1YSBBdmVudHVyZWlyb3MgQWZvcnR1bmFkb3MsIDEyMzQ1IiwgTWF4VGFtYW5ob0VuZGVyZWNvKSk7CgkJV3JpdGVMaW5lKFRyaW1Qb3NpdGlvbigiQXYgQXZlbnR1cmVpcm9zIEFmb3J0dW5hZG9zLCAxMjM0NSIsIE1heFRhbWFuaG9FbmRlcmVjbykpOwoJCVdyaXRlTGluZShUcmltUG9zaXRpb24oIlIgQXZlbnR1cmVpcm9zIEFmb3J0dW5hZG9zLCAxMjM0NSIsIE1heFRhbWFuaG9FbmRlcmVjbykpOwoJCVdyaXRlTGluZShUcmltUG9zaXRpb24oIiBBdmVudHVyZWlyb3MgQWZvcnR1bmFkb3MsIDEyMzQ1IiwgTWF4VGFtYW5ob0VuZGVyZWNvKSk7CgkJV3JpdGVMaW5lKFRyaW1Qb3NpdGlvbigiQXZlbnR1cmVpcm9zIEFmb3J0dW5hZG9zLCAxMjM0NSIsIE1heFRhbWFuaG9FbmRlcmVjbykpOwoJCVdyaXRlTGluZShUcmltUG9zaXRpb24oIkF2ZW50dXJlaXJvcyBBZm9ydHVuYWRvcywgMTIzNCIsIE1heFRhbWFuaG9FbmRlcmVjbykpOwoJfQkJCglzdGF0aWMgc3RyaW5nIFRyaW1Qb3NpdGlvbihzdHJpbmcgdGV4dCwgaW50IGxpbWl0LCBzdHJpbmcgc3BlY2lhbENoYXJzID0gIiAsLiIsIHN0cmluZyB0cmltTWFya2VyID0gIi4uLiIpIHsKCQlpZiAodGV4dC5MZW5ndGggPiBsaW1pdCkgewoJCQl2YXIgbWFya2VyTGVuZ3RoID0gdHJpbU1hcmtlci5MZW5ndGg7CgkJCXZhciBpc1NwZWNpYWwgPSBzcGVjaWFsQ2hhcnMuQ29udGFpbnModGV4dC5TdWJzdHJpbmcobGltaXQgLSBtYXJrZXJMZW5ndGgsIDEpKTsKCQkJdGV4dCA9IHRleHQuU3Vic3RyaW5nKDAsIGxpbWl0IC0gbWFya2VyTGVuZ3RoKTsKCQkJdmFyIHBvc2ljYW9VbHRpbW9Fc3BhY28gPSB0ZXh0Lkxhc3RJbmRleE9mQW55KHNwZWNpYWxDaGFycy5Ub0NoYXJBcnJheSgpKTsKCQkJdGV4dCA9ICgocG9zaWNhb1VsdGltb0VzcGFjbyA+IDAgJiYgIWlzU3BlY2lhbCkgPyB0ZXh0LlN1YnN0cmluZygwLCBwb3NpY2FvVWx0aW1vRXNwYWNvKSA6IHRleHQpICsgdHJpbU1hcmtlcjsKCQl9CgkJcmV0dXJuIHRleHQ7Cgl9Cn0KCi8vaHR0cHM6Ly9wdC5zdGFja292ZXJmbG93LmNvbS9xLzExNDk1OS8xMDEK