простой способ использовать для своей выгоды первую букву каждого слова (разделенный пространством)
$words = explode(” “, $string);
for ($i=0; $i<count($words); $i++) {
$s = strtolower($words[$i]);
$s = substr_replace($s, strtoupper(substr($s, 0, 1)), 0, 1);
$result .= “$s “;
}
$string = trim($result);
с точки зрения ловли примера "O'REILLY", который Вы дали разделению строки на обоих пробелах и, 'не будет работать, поскольку это использовало бы для своей выгоды любую букву, которая появилась после apostraphe т.е. s в Fred
, таким образом, я, вероятно, попробую что-то как
$words = explode(” “, $string);
for ($i=0; $i<count($words); $i++) {
$s = strtolower($words[$i]);
if (substr($s, 0, 2) === "o'"){
$s = substr_replace($s, strtoupper(substr($s, 0, 3)), 0, 3);
}else{
$s = substr_replace($s, strtoupper(substr($s, 0, 1)), 0, 1);
}
$result .= “$s “;
}
$string = trim($result);
, Это должно поймать O'Reilly, Час, O'Donnell и т.д. надеется, что это помогает
, обратите внимание, что этот код не тестируется.
Как говорит Криппледсмурф, он использует отражение. См. Отражение: нарушение всех правил и Гибернация: сохранение контракта объекта .
Попытка
import java.lang.reflect.Field;
class Test {
private final int value;
Test(int value) { this.value = value; }
public String toString() { return "" + value; }
}
public class Main {
public static void main(String... args) throws NoSuchFieldException, IllegalAccessException {
Test test = new Test(12345);
System.out.println("test= "+test);
Field value = Test.class.getDeclaredField("value");
value.setAccessible(true);
System.out.println("test.value= "+value.get(test));
value.set(test, 99999);
System.out.println("test= "+test);
System.out.println("test.value= "+value.get(test));
}
}
выводит
test= 12345
test.value= 12345
test= 99999
test.value= 99999
Предположительно, я бы сказал, что это делается путем отражения целевого типа и установки полей напрямую с помощью отражения
Я не программист на Java, но я считаю, что в Java есть поддержка отражения, аналогичная к .NET, который я использую