精华内容
下载资源
问答
  • 空字符串字符串不为空 介绍 我团队中的一名初级程序员遇到了一有趣的错误。 我已经不止一次看到它的症状。 这篇文章是寻找什么以及如何在将来防止它。 我还将探讨该问题的不同解决方案。 病征 有问题的代码看...

    空字符串字符串不为空

    介绍

    我团队中的一名初级程序员遇到了一个有趣的错误。 我已经不止一次看到它的症状。 这篇文章是寻找什么以及如何在将来防止它。 我还将探讨该问题的不同解决方案。

    病征

    有问题的代码看起来做得不错。:

    if(trouble != null && !trouble.isEmpty()) {
    System.out.println(“fine here: ” + trouble);
    } else {
    System.out.println(“not so fine here: ” + trouble);
    }

    该代码将命中“ fine here”块,但将输出“ null”值。 通过读取文件来设置变量。

    调查中

    我和开发人员查看了打印件并进行了几次测试,但结果却相同。 我看了在哪里设置变量。 如果那里什么也没有,它应该将值设置为null,但是打印输出表明该值为null。 我有一个主意,我们决定进行测试。 他更改了代码:

    if(trouble != null && !trouble.isEmpty() && !trouble.equals(“null”)) {
    System.out.println(“fine here”);
    } else {
    System.out.println(“not so fine here”);
    }

    每次测试都进行到“这里不太好”。 似乎该值设置为字符串“ null”而不是值null。

    学什么

    说实话,我以前已经看过了。 我花了大约一天的时间开始执行相同的代码来弄清楚它。 我从中了解到,参数检查仍然是一件好事。 我发现有效的字符串检查可以在代码中的多个地方使用。 为了防止复制和粘贴反模式,我将验证抽象为一个方法。

    private static boolean isValidString(String test) {
    boolean isValid = (test != null && !test.isEmpty() && !test.equals(“null”));
    return isValid;
    }

    防止越来越长的验证行的下一步是将其抽象到验证对象。 这允许一个肮脏的单词列表。

    public class StringValidator {
    private List<String> dirtyWords;
    
    public static final int ARRAY_SIZE = 20;
    public StringValidator() {
    dirtyWords = new ArrayList(ARRAY_SIZE);
    }
    
    public boolean isValid(String test) {
    boolean isValid = false;
    isValid = (test != null) && !test.isEmpty();
    if(isValid) {
    for(String word: dirtyWords) {
    if(word.equals(test)) {
    isValid = false;
    break;
    }
    }
    }
    return isValid;
    }
    
    public void addDirtyWord(String word) {
    if(!isValidString(word)){
    throw new IllegalArgumentException(word + ” is not a good dirty word”);
    }
    
    dirtyWords.add(word);
    }
    
    private boolean isValidString(String test) {
    return ((test != null) && !test.isEmpty());
    }
    }
    
    which leads to this parameter checking code:
    
    if(validator.isValid(trouble)) {
    System.out.println(“fine here”);
    } else {
    System.out.println(“not so fine here”);
    }

    结论

    有时我们需要跳出框框思考一下问题。 让您对问题有第二眼的感觉并不难; 这也许是发生的最好的事情。 我探索了最终创建验证器的解决方案,该验证器无需经过冗长而令人困惑的测试即可包含脏词列表。

    翻译自: https://www.javacodegeeks.com/2014/10/when-a-string-is-null-but-not-null.html

    空字符串字符串不为空

    展开全文
  • 1. 自动换行   word-break:break-all;   2. 行间距   line-height:21px;   3. 左个字符大小   padding-left: 10px;  

    1. 自动换行

     

    word-break:break-all;

     

    2. 行间距

     

    line-height:21px;

     

    3. 左空几个字符大小

     

    padding-left: 10px;

     

    展开全文
  • 最近发现许多操作都是需要调用windows的COM组件,虽然java有JNI,但是似乎并不好用,后来...主要实现打开一临时word,填写一个字符串。 /*********************************************************************

    最近发现许多操作都是需要调用windows的COM组件,虽然java有JNI,但是似乎并不好用,后来发现有个jacob,底层虽然也是使用JNI,但是直接使用jacob,好了很多,,下面是一个简单的demo;

    主要实现打开一个临时word,填写一个字符串。

    /*******************************************************************************
     * @project: jacobTest
     * @package: com.jacob.burns
     * @file: JacobTest2.java
     * @author: Administrator
     * @created: 2017-9-8
     * @purpose:
     * 
     * @version: 1.0
     * 
     * Revision History at the end of file.
     * 
     * Copyright 2017 AcconSys All rights reserved.
     ******************************************************************************/
    
    package com.jacob.burns;
    
    import com.jacob.activeX.ActiveXComponent;
    import com.jacob.com.ComThread;
    import com.jacob.com.Dispatch;
    import com.jacob.com.Variant;
    
    public class JacobTest2 {
    
    	public static void main(String[] args) {
    		ComThread.InitSTA();// 初始化com的线程,非常重要!!使用结束后要调用 realease方法
    		// 2. 初始化word应用程序,新建一个空白文档,取得文档内容对象//Instantiate objWord //Declare word
    		// object
    		ActiveXComponent objWord = new ActiveXComponent("Word.Application");
    		// Assign a local word object
    		Dispatch wordObject = (Dispatch) objWord.getObject();
    		// Create a Dispatch Parameter to show the document that is opened
    		Dispatch.put((Dispatch) wordObject, "Visible", new Variant(true));// new
    																			// Variant(true)表示word应用程序可见
    		// Tip:设置一个对象的属性的时候,利用Dispatch的put方法,给属性赋值。上面这行语句相当于vb的
    		// wordObject.Visible = true 语句
    		// Instantiate the Documents Property
    		Dispatch documents = objWord.getProperty("Documents").toDispatch(); // documents表示word的所有文档窗口,(word是多文档应用程序)
    		// Add a new word document, Current Active Document
    		Dispatch document = Dispatch.call(documents, "Add").toDispatch(); // 使用Add命令创建一个新文档,用Open命令可以打开一个现有文档
    		// Tip:调用一个对象的方法的时候,利用Dispatch的call方法,上面的语句相当于vb的document =
    		// documents.Add() 语句。
    		Dispatch wordContent = Dispatch.get(document, "Content").toDispatch(); // 取得word文件的内容
    		// Tip:取得一个对象的成员变量(属性)时利用Dispatch的get方法,上面的语句相当于vb的wordContent =
    		// document.Content语句
    		// 3. 取得word文档的内容后,可以对其内容进行操作
    		Dispatch.call(wordContent, "InsertAfter", "这里是一个段落的内容");// 插入一个段落
    		// 4. 设置刚插入的段落的文字格式
    		Dispatch paragraphs = Dispatch.get(wordContent, "Paragraphs")
    				.toDispatch(); // 所有段落
    		int paragraphCount = Dispatch.get(paragraphs, "Count").toInt(); // 一共的段落数
    		// 找到刚输入的段落,设置格式
    		Dispatch lastParagraph = Dispatch.call(paragraphs, "Item",
    				new Variant(paragraphCount)).toDispatch(); // 最后一段
    		Dispatch lastParagraphRange = Dispatch.get(lastParagraph, "Range")
    				.toDispatch();
    		Dispatch font = Dispatch.get(lastParagraphRange, "Font").toDispatch();
    		Dispatch.put(font, "Bold", new Variant(true)); // 设置为黑体
    		Dispatch.put(font, "Italic", new Variant(true)); // 设置为斜体
    		Dispatch.put(font, "Name", new Variant("宋体")); //
    		Dispatch.put(font, "Size", new Variant(12)); // 小四
    	}
    }
    
    /*******************************************************************************
     * <B>Revision History</B><BR>
     * [type 'revision' and press Alt + / to insert revision block]<BR>
     * 
     * 
     * 
     * Copyright 2017 AcconSys All rights reserved.
     ******************************************************************************/
    


    展开全文
  • 用phpword处理docx模板时候始终发生神奇的BUG,就是复制原版例子里的${Value1}进自己的模板然后替换是没... 原来有2个PHPWord项目: 其中适用比较广的是PHPOffice项目下的一子项目 Git地址:https://github

    phpword处理docx模板时候始终发生神奇的BUG,就是复制原版例子里的${Value1}进自己的模板然后替换是没问题的,但是只要一改动这个变量文字,PHP做相应替换就失效了。

    用了下残废百度无果,一怒翻起google,准确度高多了。

       原来有2个PHPWord项目:

    其中适用比较广的是PHPOffice项目下的一个子项目

    Git地址:https://github.com/PHPOffice/PHPWord

    查看官方的文档:

    http://phpword.readthedocs.org/en/latest/templates-processing.html?highlight=replace

    具体如何用模板做替换:

    1. include_once ('exec/lib/phpword/src/PhpWord/PHPWord.php');  
    2. use PhpOffice\PhpWord\Autoloader;  
    3. use PhpOffice\PhpWord\Settings;  
    4. use PhpOffice\PhpWord\IOFactory;  
    5.   
    6. include_once ('exec/lib/phpword/src/PhpWord/Autoloader.php');  
    7. Autoloader::register();  
    8. Settings::loadConfig();  
    9.   
    10. // Create a new PHPWord Object  
    11. $PHPWord = new \PhpOffice\PhpWord\PhpWord();  
    12. $templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor('statics/template/adminPositive.docx');  
    13. $templateProcessor->setValue('xm1''姓名');  
    14. $templateProcessor->setValue('zw1''公务员');  
    15. $templateProcessor->setValue('sfz1''360281199909090009');  
    16. $templateProcessor->setValue('gz1''统发');  
    17. //$templateProcessor->setValue('Street', 'Coming-Undone-Street 32');  
    18. $templateProcessor->saveAs('test.docx');  

    这里要注意的是换行问题。


    另外copy一篇比较nice的博文做个备份

    转载自:http://wangye.org/blog/archives/943/

    ===============================================================================================

    最近一个项目开发要用到PHP技术导出Word文档,比较了几种方案,首先是使用Microsoft Office自带的ActiveX/COM组件,比如Word.Application,这种方式的优点是格式兼容度高,可以生成纯doc的Word2003格式文档,缺点一是比较占资源(调用会启动一个WINWORD.EXE进程),不适合Web多用户访问使用;二是PHP这种Web开发技术大多数是跑在Linux服务器上,当然也就无法使用Windows下的技术了,平台可移植和兼容性不好。第二种生成Word的方案是生成Word兼容的网页格式,然后以Word方式打开,这种方案总体上感觉怪怪的,毕竟文件格式是HTML的,而且格式兼容度不好,不过这种方式的优点是节省服务器资源,能够快速生成;最后一种方案也就是今天的主角,采用PHPWord生成Word2007(docx)格式的文档,现在基本上微软Office Word 2003以后的版本均兼容这种格式了,对于2003版本来说,仅需要下载安装个兼容格式包(下载地址),也能正常打开这类文件,当然如果你使用的是最新版本的Office(包括但不限于Office 2007、Office 2010)则不需要安装此格式包。

    好了,下面我就介绍一下PHPWord,大家可以通过访问项目主页下载并获得关于项目的更多信息。

    我在使用过程中主要遇到了中文乱码的问题,结合网上大神们的指导,通过下面的方式解决了这类问题,希望对大家有所帮助。

    1、增加东亚字体支持

    打开并编辑路径/Writer/Word2007/Base.php文件内容,大概在第349行(行数随着版本可能会有变化)大概函数_writeTextStyle内添加:

    1. $objWriter->writeAttribute('w:eastAsia'$font)  


    比如我的修改片段基本是下面这样:

    1. // Font  
    2. if($font != 'Arial') {  
    3.     $objWriter->startElement('w:rFonts');  
    4.         $objWriter->writeAttribute('w:eastAsia'$font); // 添加这行  
    5.         $objWriter->writeAttribute('w:ascii'$font);  
    6.         $objWriter->writeAttribute('w:hAnsi'$font);  
    7.         $objWriter->writeAttribute('w:cs'$font);  
    8.     $objWriter->endElement();  
    9. }  


    2. 解决中文乱码问题

    编辑PHPWord/Template.php,找到代码$replace = utf8_encode($replace);,删除或者注释掉这行代码,添加$replace = iconv( 'gbk','utf-8', $replace);,比如代码改为如下:

    1. /** 
    2.  * Set a Template value 
    3.  *  
    4.  * @param mixed $search 
    5.  * @param mixed $replace 
    6.  */  
    7. public function setValue($search$replace) {  
    8.     if(substr($search, 0, 2) !== '${' && substr($search, -1) !== '}') {  
    9.         $search = '${'.$search.'}';  
    10.     }  
    11.    
    12.     if(!is_array($replace)) {  
    13.         //$replace = utf8_encode($replace);  
    14.         $replace =iconv('gbk''utf-8'$replace); // 注释掉上面行后添加这行  
    15.     }  
    16.    
    17.     $this->_documentXML = str_replace($search$replace$this->_documentXML);  
    18. }  


    调用方式如下:

    1. $document->setValue('Template', iconv('utf-8''GB2312//IGNORE''中文'));  


    上面的代码主要解决模板的问题,下面同样的道理,解决Section添加文本的问题,找到代码$givenText = utf8_encode($text);,删除或者注释掉这行代码,添加$givenText = iconv('gbk', 'utf-8', $text);,比如代码如下:

    1. /** 
    2.  * Add a Text Element 
    3.  *  
    4.  * @param string $text 
    5.  * @param mixed $styleFont 
    6.  * @param mixed $styleParagraph 
    7.  * @return PHPWord_Section_Text 
    8.  */  
    9. public function addText($text$styleFont = null, $styleParagraph = null) {  
    10.     //$givenText = utf8_encode($text);  
    11.     $givenText = iconv('gbk''utf-8'$text); // 注释掉上面行后添加这行  
    12.     $text = new PHPWord_Section_Text($givenText$styleFont$styleParagraph);  
    13.     $this->_elementCollection[] = $text;  
    14.     return $text;  
    15. }  


    调用方式和上面的模板调用大同小异,这边就不列举了。

    折腾了这么多,突然发现网上还有另外一个版本的PhpWord,项目类名大小写上略有不同,隶属于PHPOffice/PHPWordGitHub项目地址文档)。这个版本的PHPWord内容更加丰富,支持的功能也比较多(包括行间距,缩进和首行缩进等),最后我也采取的这个版本的PHPWord,值得注意的是这两个版本的PHPWord在API接口上基本一致,可以通用。但是有些API,在PHPOffice/PHPWord里是不推荐的,比如createSection需要改成addSection,另外应用这个版本的PHPWord不需要像上面那样做任何中文支持的修改,比较省事。

    这两个PHPWord项目的官方都提供了较详细的使用例子和文档,这里就不介绍了。最后提示的是:在模板模式下loadTemplate,只能使用setValue等模板操作方法,不能再添加段落或者段落修改了。这个略有不便。

    参考文档:phpword 部分BUG修改笔记及心得

    对于PHPOffice/PHPWord我提供一个简单的例子供参考(当然官方例子更多):

    1. require_once 'PhpOffice/PhpWord/PhpWord.php'// 包含头文件  
    2. use PhpOffice\PhpWord\Autoloader;  
    3. use PhpOffice\PhpWord\Settings;  
    4. use PhpOffice\PhpWord\IOFactory;  
    5.    
    6. require_once __DIR__ . '/PhpOffice/PhpWord/Autoloader.php';  
    7. Autoloader::register();  
    8. Settings::loadConfig();  
    9.    
    10. // Create a new PHPWord Object  
    11. $PHPWord = new \PhpOffice\PhpWord\PhpWord();  
    12. $PHPWordHelpernew \PhpOffice\PhpWord\Shared\Font();  
    13.    
    14. $PHPWord->setDefaultFontName('仿宋'); // 全局字体  
    15. $PHPWord->setDefaultFontSize(16);     // 全局字号为3号  
    16.    
    17. // 设置文档的属性,这些在对文档右击属性可以看到,也可以省去这些步骤  
    18. $properties = $PHPWord->getDocumentProperties();  
    19. $properties->setCreator('张三');   // 创建者  
    20. $properties->setCompany('某公司'); // 公司  
    21. $properties->setTitle('某某文档'); // 标题  
    22. $properties->setDescription('http://wangye.org'); // 描述  
    23. $properties->setLastModifiedBy('李四'); // 最后修改  
    24. $properties->setCreated( time() );      // 创建时间  
    25. $properties->setModified( time() );     // 修改时间  
    26.    
    27. // 添加3号仿宋字体到'FangSong16pt'留着下面使用  
    28. $PHPWord->addFontStyle('FangSong16pt'array('name'=>'仿宋''size'=>16));  
    29.    
    30. // 添加段落样式到'Normal'以备下面使用  
    31. $PHPWord->addParagraphStyle(  
    32.   'Normal',array(  
    33.     'align'=>'both',  
    34.     'spaceBefore' => 0,  
    35.     'spaceAfter' => 0,  
    36.     'spacing'=>$PHPWordHelper->pointSizeToTwips(2.8),  
    37.     'lineHeight' => 1.19,  // 行间距  
    38.     'indentation' => array// 首行缩进  
    39.       'firstLine' => $PHPWordHelper->pointSizeToTwips(32)  
    40.     )  
    41.   )  
    42. );  
    43.    
    44. // Section样式:上3.5厘米、下3.8厘米、左3厘米、右3厘米,页脚3厘米  
    45. // 注意这里厘米(centimeter)要转换为twips单位  
    46. $sectionStyle = array(  
    47.     'orientation' => null,  
    48.     'marginLeft' => $PHPWordHelper->centimeterSizeToTwips(3),  
    49.     'marginRight' => $PHPWordHelper->centimeterSizeToTwips(3),  
    50.     'marginTop' => $PHPWordHelper->centimeterSizeToTwips(3.5),  
    51.     'marginBottom' => $PHPWordHelper->centimeterSizeToTwips(3.8),  
    52.     'pageNumberingStart' => 1, // 页码从1开始  
    53.     'footerHeight' => $PHPWordHelper->centimeterSizeToTwips(3),  
    54. );  
    55.    
    56. $section = $PHPWord->addSection($sectionStyle); // 添加一节  
    57.    
    58. // 下面这句是输入文档内容,注意这里用到了刚才我们添加的  
    59. // 字体样式FangSong16pt和段落样式Normal  
    60. $section->addText('文档内容''FangSong16pt''Normal');  
    61. $section->addTextBreak(1); // 新起一个空白段落  
    62.    
    63. $objWriter = IOFactory::createWriter($PHPWord'Word2007');  
    64. $objWriter->save('/path/to/file'); // 保存到/path/to/file路径下  

    展开全文
  • '如何temptext不等于空字符串,则 If temptext <> "" Then Windows("被插入文字的文件.docx").Activate ActiveDocument.Content.InsertAfter temptext '把光标移动到文档未尾,下一句为进行回车。 Selection.End...
  • 空字符和空格字符有什么区别?

    千次阅读 2019-07-09 09:17:21
    char ch1 = '\0' ,ch2 = ' '; System.out.println(""+(int)ch1);...由此可见,空字符('\0')的ascii值是0,实际应用上是字符串结尾自动补上的一字符 有的时候用来判断是否到了字符串结尾 而空格字符...
  • 不过有些特殊的需求并不能满足,如要生成的Word为一表格,只是一部分字符串需要变化,用上面的方法生成Word表格容易变形。如果我们能读取一个word模板,把模板里定义的固定字符串如{标记1}替换为想要的文字,然后...
  • 于是改变思路,从后面开始遍历,找到最后一单词的最后一个字符开始计数,然后依次向前知道遇到第一空格。 方法: 使用投机取巧的方法,用split函数把字符串按照空格分隔好,返回最后那个就行。。。
  • 用pdfBox解析pdf,1m以下的pdf可以成功解析出来,但是1m以上的pdf都没办法解析出来,到底是为什么?jvm内存限制也不应该只能解析1M的文件啊?求大神解答~
  • 字符数组不等价于char字符串指针的 作为数组的时候,定义多长,内存分配空间就是...字符数组是否为是要自己定义的概念的 如果你的定义是把字符数组当中字符串来理解的话,第一元素是否是\0字符就是判断准则了
  • Java中去掉空字符

    千次阅读 2017-09-27 10:27:38
    在java中去掉空字符的三种方法1.trim() :去掉字符串左右两端的字符空格 2.repalaceAll(” “,”“):去掉字符串中所有的空格 3.relalaceAll(“+”,”“):去掉字符串中所有的空格具体代码:package ...
  • 读取word文档 import docx #打开demo.docx文档,返回一Document对象,它有paragraphs属性,时Paragraph对象的列表。 doc = docx.Document('demo.docx') len(doc.paragraphs) >> 7 doc.paragraphs[0]....
  • word-spacing 属性增加或减少单词间的空白(即字间隔)。 normal 默认。定义单词间的标准空间。 length 定义单词间的固定空间。 inherit 规定应该从父元素继承 word-spacing 属性的值。 示例: ...
  • word中设置英文单词按字符换行

    千次阅读 2014-09-20 22:12:57
    word中输入比较长的英文单词,如果单词超过了行尾,则会自动换行,这样就形成了上一行剩下的字数很少,如果是两段对齐,则字符间距会变大;如果左对齐,则会出现右边出一大行。 解决方法: 1、...
  • word中去掉所有中文字符的方法

    千次阅读 2017-11-15 10:48:00
    首先使用Ctrl+F打开查找框,然后执行以下步骤: 1、在查找框中输入[!^1-^127],意思是找出非标准ASCII编码之外的...在替换为里面留。 5、点击替换完成操作。 此时所有中文字符都被替换成空格,即删除成功。 ...
  • 批量删除word中特殊字符的方法

    千次阅读 2011-11-02 16:02:26
    (一)批量删除Word中回车的方法 ...点击菜单栏中的“编辑”→“替换” ,在“查找内容”里面输入^l, “替换为”里面不输入任何字符,然后点“全部替换” 。 点击菜单栏中的“编辑”→“替换” ,在“查找内容”里
  • wps空字符串显示为方块

    千次阅读 2015-02-07 14:39:34
    表格导出到excel ,一单元格式很长的一个空字符串,word显示正常,wps显示为方框,原因是导出的表格在wps中字体是Tahoma,wps不支持这种字体下空字符的显示,微软word支持。两软件完全不能比啊
  • python:字符串分割word-break

    千次阅读 2018-02-12 14:26:02
    1、给定字符串s,列表t,其中的元素也是字符串,判断s是否可以分割成t中的一或多元素。例如: s='csdncode', t=['csdn','python','code'], output:True 代码如下: def wordBreak(s, t): ok = [True] # ...
  • 3、设计好一字,将控制栏的字符集下拉表点开,选择“Unicode”字符集; 4、点击菜单栏上的“编辑”→保存字符; 5、关闭窗口。点击开始→所有程序→附件→系统工具→字符映射表; 6、
  • python学习笔记之删除列表空字符

    千次阅读 2020-10-30 10:45:23
    删除列表里的空字符串 方法一:利用for…in 循环遍历列表,如果列表中有空字符串,利用remove删除空字符串 ```python words=['hello','good','yes','ok',''] for word in words: if word=='': words.remove(word...
  • 关于WPS中,Tab缩进2个字符设置

    千次阅读 2020-10-17 16:37:44
    通过一下方式,我们可以设置它缩进2个字符。 通过选中制表符,在弹出的对话框中选中,默认制表位设置为2个字符。 如果制表符列表中不为,可以点击“全部清除”。 确定后,每次使用按Tab键就可以自动缩进2个字符...
  • 除非不用自动断字的连字符,而是手打连字符笨办法可以完美解决,word是无法兼顾两者的。 这问题在写论文时经常遇到,实际上我们仔细看那些文献的参考文献格式,都是选择了自动断字的连字符,而没有勾选“允
  • java编写程序查找一个字符串中第一非重复的字符
  • 敲两下汉字(一汉字为占两字节)。 2.如果输入法设为全角状态, 敲一下空格,占两字节,两格,占一汉字。 3.半角状态: 全角状态: ,如果为搜狗输入法,一般是shift+空格切换。来自百度知道:...
  • 将西文单词从自动换行的位置处断开,某位添加一小横线(连字符)。一般来说,许多人为了美观排版常常将段落的对齐方式设置为两端对齐方式,此时要是在某行的结尾有一词特别长,而在这一行中显示不下的话,Word...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 123,170
精华内容 49,268
关键字:

word空2个字符