В вашем коде есть одна или две проблемы. Во-первых, регулярное выражение не ищет десятичные числа. Если вы измените его на
.Pattern = "\d+\.?(\d?)+"
, он будет работать лучше. Вкратце:
\ d + = хотя бы одна цифра
. = Необязательная точка
(\ d?) + = Необязательные числа
Это не водостойкое выражение, но оно работает в некоторой степени, по крайней мере.
Второй проблемой является потенциальная проблема различия десятичных символов, и в этом случае вам нужно будет выполнить поиск и замену перед обработкой.
Хитрый внутренний путь:
InternalPlatform.getDefault().getBundleContext()
мог сделать это.
Вы найдете пример в этом классе
public class ExportClassDigestApplication implements IApplication {
public Object start(IApplicationContext context) throws Exception {
context.applicationRunning();
List<ExtensionBean> extensionBeans = ImpCoreUtil.loadExtensionBeans("com.xab.core.containerlaunchers");
for (ExtensionBean bean : extensionBeans) {
ILauncher launcher = (ILauncher) bean.getInstance();
launcher.start();
}
ClassFilter classFilter = new ClassFilter() {
public boolean isClassAccepted(Class clz) {
return true;
}
};
PrintWriter writer = new PrintWriter( new File( "C:/classes.csv"));
Bundle[] bundles = InternalPlatform.getDefault().getBundleContext().getBundles();
Каждый плагин имеет доступ к своему собственному контексту пакета.
Просто удостоверьтесь, что Ваш сменный класс переопределяет запуск (BundleContext) метод. Можно затем сохранить его к месту, к которому могут легко получить доступ классы в плагине
Обратите внимание, что контекст пакета, предоставленный плагину, характерен для него и никогда не должен совместно использоваться с другими плагинами.
Только что наткнулся на это при поиске в Интернете и подумал, что буду продвигать новый стандарт OSGi R4.2 (предоставляется Equinox, поставляемым с Eclipse 3.5). Если у вас нет активатора и вы не хотите создавать его только для кэширования контекста пакета, вы можете использовать FrameworkUtil.getBundle. Модификация предыдущего примера:
import org.osgi.framework.FrameworkUtil;
public class ExportClassDigestApplication implements IApplication {
public Object start(IApplicationContext context) throws Exception {
context.applicationRunning();
BundleContext bundleContext = FrameworkUtil.getBundle(this.getClass())
.getBundleContext();
}
}